{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Newton’s method and nonlinear equations\n",
    "\n",
    "In first-year calculus, most students learn [Newton’s method](https://en.wikipedia.org/wiki/Newton's_method) for solving nonlinear equations $f(x) = 0$, which iteratively improves a sequence of guesses for the solution $x$ by **approximating f by a straight line**.   That is, it **approximates a *nonlinear* equation by a sequence of approximate *linear* equations**.\n",
    "\n",
    "This can be extended to *systems* of nonlinear equations as a **multidimensional Newton** method, in which we iterate by solving a sequence of linear (*matrix*) systems of equations.  This is one example of an amazing fact: **linear algebra is a fundamental tool even for solving nonlinear equations**."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Packages for this notebook"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "    <script class='js-collapse-script'>\n",
       "        var curMatch =\n",
       "            window.location.href\n",
       "            .match(/(.*?)\\/notebooks\\/.*\\.ipynb/);\n",
       "\n",
       "        curMatch = curMatch ||\n",
       "            window.location.href\n",
       "            .match(/(.*?)\\/apps\\/.*\\.ipynb/);\n",
       "\n",
       "        if ( curMatch ) {\n",
       "            $('head').append('<base href=\"' + curMatch[1] + '/\">');\n",
       "        }\n",
       "    </script>\n"
      ],
      "text/plain": [
       "HTML{String}(\"    <script class='js-collapse-script'>\\n        var curMatch =\\n            window.location.href\\n            .match(/(.*?)\\\\/notebooks\\\\/.*\\\\.ipynb/);\\n\\n        curMatch = curMatch ||\\n            window.location.href\\n            .match(/(.*?)\\\\/apps\\\\/.*\\\\.ipynb/);\\n\\n        if ( curMatch ) {\\n            \\$('head').append('<base href=\\\"' + curMatch[1] + '/\\\">');\\n        }\\n    </script>\\n\")"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<script class='js-collapse-script' src='/assetserver/2788aaff54f3972bd10a224d42612bcbc5553044-assets/webio/dist/bundle.js'></script>"
      ],
      "text/plain": [
       "HTML{String}(\"<script class='js-collapse-script' src='/assetserver/2788aaff54f3972bd10a224d42612bcbc5553044-assets/webio/dist/bundle.js'></script>\")"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<script class='js-collapse-script' src='/assetserver/2788aaff54f3972bd10a224d42612bcbc5553044-assets/providers/ijulia_setup.js'></script>"
      ],
      "text/plain": [
       "HTML{String}(\"<script class='js-collapse-script' src='/assetserver/2788aaff54f3972bd10a224d42612bcbc5553044-assets/providers/ijulia_setup.js'></script>\")"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "  <script class='js-collapse-script'>\n",
       "    $('.js-collapse-script').parent('.output_subarea').css('padding', '0');\n",
       "  </script>\n"
      ],
      "text/plain": [
       "HTML{String}(\"  <script class='js-collapse-script'>\\n    \\$('.js-collapse-script').parent('.output_subarea').css('padding', '0');\\n  </script>\\n\")"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Pkg.add.([\"Interact\", \"PyPlot\", \"ForwardDiff\"]) # uncomment this line to install packages\n",
    "using Interact, PyPlot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## One-dimensional Newton\n",
    "\n",
    "The standard one-dimensional Newton’s method proceeds as follows.  Suppose we are solving for a zero (root) of $f(x)$:\n",
    "\n",
    "$$\n",
    "f(x) = 0\n",
    "$$\n",
    "\n",
    "for an arbitrary (but differentiable) function $f$, and we have a guess $x$.   We find an *improved* guess $x+\\delta$ by [Taylor expanding](https://en.wikipedia.org/wiki/Taylor_series) $f(x+\\delta)$ around $x$ to *first order* (linear!) in $\\delta$, and finding the .  (This should be accurate if $x$ is *close enough* to a solution, so that the $\\delta$ is *small*.)  That is, we solve:\n",
    "\n",
    "$$\n",
    "f(x + \\delta) \\approx f(x) + f'(x) \\delta = 0\n",
    "$$\n",
    "\n",
    "to obtain $\\delta = -f(x) / f'(x)$.  Plugging this into $x+\\delta$, we obtain:\n",
    "\n",
    "$$\n",
    "\\boxed{\\mbox{new } x = x - f(x)/f'(x)}.\n",
    "$$\n",
    "\n",
    "This is called a **Newton step**.  Then we simply repeat the process.\n",
    "\n",
    "Let's visualize this process for finding a root of $f(x) = 2\\cos(x) - x + x^2/10$ (a [transcendental equation](https://en.wikipedia.org/wiki/Transcendental_equation) that has no closed-form solution)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div class='tex2jax_ignore interactbulma'>\n",
       "<div class='display:none'></div><unsafe-script style='display:none'>\n",
       "WebIO.mount(this.previousSibling,{&quot;props&quot;:{},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{&quot;className&quot;:&quot;field&quot;},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{},&quot;nodeType&quot;:&quot;Scope&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;imports&quot;:{&quot;data&quot;:[{&quot;name&quot;:&quot;knockout&quot;,&quot;type&quot;:&quot;js&quot;,&quot;url&quot;:&quot;/assetserver/d6df0bcbf61025c952fa7d6260c0502952fc6253-knockout.js&quot;},{&quot;name&quot;:&quot;knockout_punches&quot;,&quot;type&quot;:&quot;js&quot;,&quot;url&quot;:&quot;/assetserver/76b9e9b6191c21207f614aefd21121e841930334-knockout_punches.js&quot;},{&quot;name&quot;:null,&quot;type&quot;:&quot;js&quot;,&quot;url&quot;:&quot;/assetserver/aee18abf5b39fa7dbdb49e13ea37aa8617a93fca-all.js&quot;},{&quot;name&quot;:null,&quot;type&quot;:&quot;css&quot;,&quot;url&quot;:&quot;/assetserver/b8ef71fc8f8c937f705d60a54c85dd170cf7e73f-style.css&quot;},{&quot;name&quot;:null,&quot;type&quot;:&quot;css&quot;,&quot;url&quot;:&quot;/assetserver/342c1e68f950ec6d9432ff00342c66dae6d08a65-main.css&quot;}],&quot;type&quot;:&quot;async_block&quot;},&quot;id&quot;:&quot;knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd&quot;,&quot;handlers&quot;:{&quot;_promises&quot;:{&quot;importsLoaded&quot;:[function (ko, koPunches) {\n",
       "    ko.punches.enableAll();\n",
       "    ko.bindingHandlers.numericValue = {\n",
       "        init : function(element, valueAccessor, allBindings, data, context) {\n",
       "            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n",
       "            stringified.subscribe(function(value) {\n",
       "                var val = parseFloat(value);\n",
       "                if (!isNaN(val)) {\n",
       "                    valueAccessor()(val);\n",
       "                }\n",
       "            })\n",
       "            valueAccessor().subscribe(function(value) {\n",
       "                var str = JSON.stringify(value);\n",
       "                if ((str == &quot;0&quot;) &amp;&amp; ([&quot;-0&quot;, &quot;-0.&quot;].indexOf(stringified()) &gt;= 0))\n",
       "                     return;\n",
       "                 if ([&quot;null&quot;, &quot;&quot;].indexOf(str) &gt;= 0)\n",
       "                     return;\n",
       "                stringified(str);\n",
       "            })\n",
       "            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get(&#39;valueUpdate&#39;)}, context);\n",
       "        }\n",
       "    };\n",
       "    var json_data = JSON.parse(&quot;{\\&quot;changes\\&quot;:0,\\&quot;value\\&quot;:1}&quot;);\n",
       "    var self = this;\n",
       "    function AppViewModel() {\n",
       "        for (var key in json_data) {\n",
       "            var el = json_data[key];\n",
       "            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n",
       "        }\n",
       "        \n",
       "        [this[&quot;displayedvalue&quot;]=ko.computed(function () {return this.value();},this)]\n",
       "        [this[&quot;changes&quot;].subscribe((function (val){!(this.valueFromJulia[&quot;changes&quot;]) ? (WebIO.setval({&quot;name&quot;:&quot;changes&quot;,&quot;scope&quot;:&quot;knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd&quot;,&quot;id&quot;:&quot;ob_02&quot;,&quot;type&quot;:&quot;observable&quot;},val)) : undefined; return this.valueFromJulia[&quot;changes&quot;]=false}),self),this[&quot;value&quot;].subscribe((function (val){!(this.valueFromJulia[&quot;value&quot;]) ? (WebIO.setval({&quot;name&quot;:&quot;value&quot;,&quot;scope&quot;:&quot;knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd&quot;,&quot;id&quot;:&quot;ob_01&quot;,&quot;type&quot;:&quot;observable&quot;},val)) : undefined; return this.valueFromJulia[&quot;value&quot;]=false}),self)]\n",
       "        \n",
       "    }\n",
       "    self.model = new AppViewModel();\n",
       "    self.valueFromJulia = {};\n",
       "    for (var key in json_data) {\n",
       "        self.valueFromJulia[key] = false;\n",
       "    }\n",
       "    ko.applyBindings(self.model, self.dom);\n",
       "}\n",
       "]},&quot;changes&quot;:[(function (val){return (val!=this.model[&quot;changes&quot;]()) ? (this.valueFromJulia[&quot;changes&quot;]=true, this.model[&quot;changes&quot;](val)) : undefined})],&quot;value&quot;:[(function (val){return (val!=this.model[&quot;value&quot;]()) ? (this.valueFromJulia[&quot;value&quot;]=true, this.model[&quot;value&quot;](val)) : undefined})]},&quot;systemjs_options&quot;:null,&quot;observables&quot;:{&quot;changes&quot;:{&quot;sync&quot;:false,&quot;id&quot;:&quot;ob_02&quot;,&quot;value&quot;:0},&quot;value&quot;:{&quot;sync&quot;:true,&quot;id&quot;:&quot;ob_01&quot;,&quot;value&quot;:1}}},&quot;children&quot;:[{&quot;props&quot;:{&quot;attributes&quot;:{&quot;style&quot;:&quot;display:flex; justify-content:center; align-items:center;&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align:right;width:18%&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{&quot;className&quot;:&quot;interact &quot;,&quot;style&quot;:{&quot;padding&quot;:&quot;5px 10px 0px 10px&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;label&quot;},&quot;children&quot;:[&quot;&quot;]}]},{&quot;props&quot;:{&quot;attributes&quot;:{&quot;style&quot;:&quot;flex-grow:1; margin: 0 2%&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{&quot;max&quot;:20,&quot;min&quot;:1,&quot;attributes&quot;:{&quot;type&quot;:&quot;range&quot;,&quot;data-bind&quot;:&quot;numericValue: value, valueUpdate: &#39;input&#39;, event: {change : function () {this.changes(this.changes()+1)}}&quot;},&quot;step&quot;:1,&quot;className&quot;:&quot;slider slider is-fullwidth&quot;,&quot;style&quot;:{}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;input&quot;},&quot;children&quot;:[]}]},{&quot;props&quot;:{&quot;attributes&quot;:{&quot;style&quot;:&quot;width:18%&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{&quot;attributes&quot;:{&quot;data-bind&quot;:&quot;text: displayedvalue&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;p&quot;},&quot;children&quot;:[]}]}]}]}]},{&quot;props&quot;:{&quot;className&quot;:&quot;field&quot;},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{},&quot;nodeType&quot;:&quot;Scope&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;imports&quot;:{&quot;data&quot;:[{&quot;name&quot;:&quot;knockout&quot;,&quot;type&quot;:&quot;js&quot;,&quot;url&quot;:&quot;/assetserver/d6df0bcbf61025c952fa7d6260c0502952fc6253-knockout.js&quot;},{&quot;name&quot;:&quot;knockout_punches&quot;,&quot;type&quot;:&quot;js&quot;,&quot;url&quot;:&quot;/assetserver/76b9e9b6191c21207f614aefd21121e841930334-knockout_punches.js&quot;},{&quot;name&quot;:null,&quot;type&quot;:&quot;js&quot;,&quot;url&quot;:&quot;/assetserver/aee18abf5b39fa7dbdb49e13ea37aa8617a93fca-all.js&quot;},{&quot;name&quot;:null,&quot;type&quot;:&quot;css&quot;,&quot;url&quot;:&quot;/assetserver/b8ef71fc8f8c937f705d60a54c85dd170cf7e73f-style.css&quot;},{&quot;name&quot;:null,&quot;type&quot;:&quot;css&quot;,&quot;url&quot;:&quot;/assetserver/342c1e68f950ec6d9432ff00342c66dae6d08a65-main.css&quot;}],&quot;type&quot;:&quot;async_block&quot;},&quot;id&quot;:&quot;knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b&quot;,&quot;handlers&quot;:{&quot;_promises&quot;:{&quot;importsLoaded&quot;:[function (ko, koPunches) {\n",
       "    ko.punches.enableAll();\n",
       "    ko.bindingHandlers.numericValue = {\n",
       "        init : function(element, valueAccessor, allBindings, data, context) {\n",
       "            var stringified = ko.observable(ko.unwrap(valueAccessor()));\n",
       "            stringified.subscribe(function(value) {\n",
       "                var val = parseFloat(value);\n",
       "                if (!isNaN(val)) {\n",
       "                    valueAccessor()(val);\n",
       "                }\n",
       "            })\n",
       "            valueAccessor().subscribe(function(value) {\n",
       "                var str = JSON.stringify(value);\n",
       "                if ((str == &quot;0&quot;) &amp;&amp; ([&quot;-0&quot;, &quot;-0.&quot;].indexOf(stringified()) &gt;= 0))\n",
       "                     return;\n",
       "                 if ([&quot;null&quot;, &quot;&quot;].indexOf(str) &gt;= 0)\n",
       "                     return;\n",
       "                stringified(str);\n",
       "            })\n",
       "            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get(&#39;valueUpdate&#39;)}, context);\n",
       "        }\n",
       "    };\n",
       "    var json_data = JSON.parse(&quot;{\\&quot;changes\\&quot;:0,\\&quot;value\\&quot;:-0.1}&quot;);\n",
       "    var self = this;\n",
       "    function AppViewModel() {\n",
       "        for (var key in json_data) {\n",
       "            var el = json_data[key];\n",
       "            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\n",
       "        }\n",
       "        \n",
       "        [this[&quot;displayedvalue&quot;]=ko.computed(function () {return this.value().toPrecision(6);},this)]\n",
       "        [this[&quot;changes&quot;].subscribe((function (val){!(this.valueFromJulia[&quot;changes&quot;]) ? (WebIO.setval({&quot;name&quot;:&quot;changes&quot;,&quot;scope&quot;:&quot;knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b&quot;,&quot;id&quot;:&quot;ob_05&quot;,&quot;type&quot;:&quot;observable&quot;},val)) : undefined; return this.valueFromJulia[&quot;changes&quot;]=false}),self),this[&quot;value&quot;].subscribe((function (val){!(this.valueFromJulia[&quot;value&quot;]) ? (WebIO.setval({&quot;name&quot;:&quot;value&quot;,&quot;scope&quot;:&quot;knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b&quot;,&quot;id&quot;:&quot;ob_04&quot;,&quot;type&quot;:&quot;observable&quot;},val)) : undefined; return this.valueFromJulia[&quot;value&quot;]=false}),self)]\n",
       "        \n",
       "    }\n",
       "    self.model = new AppViewModel();\n",
       "    self.valueFromJulia = {};\n",
       "    for (var key in json_data) {\n",
       "        self.valueFromJulia[key] = false;\n",
       "    }\n",
       "    ko.applyBindings(self.model, self.dom);\n",
       "}\n",
       "]},&quot;changes&quot;:[(function (val){return (val!=this.model[&quot;changes&quot;]()) ? (this.valueFromJulia[&quot;changes&quot;]=true, this.model[&quot;changes&quot;](val)) : undefined})],&quot;value&quot;:[(function (val){return (val!=this.model[&quot;value&quot;]()) ? (this.valueFromJulia[&quot;value&quot;]=true, this.model[&quot;value&quot;](val)) : undefined})]},&quot;systemjs_options&quot;:null,&quot;observables&quot;:{&quot;changes&quot;:{&quot;sync&quot;:false,&quot;id&quot;:&quot;ob_05&quot;,&quot;value&quot;:0},&quot;value&quot;:{&quot;sync&quot;:true,&quot;id&quot;:&quot;ob_04&quot;,&quot;value&quot;:-0.1}}},&quot;children&quot;:[{&quot;props&quot;:{&quot;attributes&quot;:{&quot;style&quot;:&quot;display:flex; justify-content:center; align-items:center;&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{&quot;attributes&quot;:{&quot;style&quot;:&quot;text-align:right;width:18%&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{&quot;className&quot;:&quot;interact &quot;,&quot;style&quot;:{&quot;padding&quot;:&quot;5px 10px 0px 10px&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;label&quot;},&quot;children&quot;:[&quot;&quot;]}]},{&quot;props&quot;:{&quot;attributes&quot;:{&quot;style&quot;:&quot;flex-grow:1; margin: 0 2%&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{&quot;max&quot;:4.0,&quot;min&quot;:-4.0,&quot;attributes&quot;:{&quot;type&quot;:&quot;range&quot;,&quot;data-bind&quot;:&quot;numericValue: value, valueUpdate: &#39;input&#39;, event: {change : function () {this.changes(this.changes()+1)}}&quot;},&quot;step&quot;:0.1,&quot;className&quot;:&quot;slider slider is-fullwidth&quot;,&quot;style&quot;:{}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;input&quot;},&quot;children&quot;:[]}]},{&quot;props&quot;:{&quot;attributes&quot;:{&quot;style&quot;:&quot;width:18%&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[{&quot;props&quot;:{&quot;attributes&quot;:{&quot;data-bind&quot;:&quot;text: displayedvalue&quot;}},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;p&quot;},&quot;children&quot;:[]}]}]}]}]},{&quot;props&quot;:{},&quot;nodeType&quot;:&quot;Scope&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;imports&quot;:{&quot;data&quot;:[],&quot;type&quot;:&quot;async_block&quot;},&quot;id&quot;:&quot;scope-ee0fc108-11f5-4e47-b6de-f9ae775e4e7a&quot;,&quot;handlers&quot;:{&quot;obs-output&quot;:[function (updated_htmlstr) {\n",
       "    var el = this.dom.querySelector(&quot;#out&quot;);\n",
       "    WebIO.propUtils.setInnerHtml(el, updated_htmlstr);\n",
       "}]},&quot;systemjs_options&quot;:null,&quot;observables&quot;:{&quot;obs-output&quot;:{&quot;sync&quot;:false,&quot;id&quot;:&quot;ob_09&quot;,&quot;value&quot;:&quot;&lt;div class=&#39;display:none&#39;&gt;&lt;/div&gt;&lt;unsafe-script style=&#39;display:none&#39;&gt;\\nWebIO.mount(this.previousSibling,{&amp;quot;props&amp;quot;:{&amp;quot;attributes&amp;quot;:{&amp;quot;style&amp;quot;:&amp;quot;display:flex; justify-content:center; align-items:center;&amp;quot;}},&amp;quot;nodeType&amp;quot;:&amp;quot;DOM&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;instanceArgs&amp;quot;:{&amp;quot;namespace&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;tag&amp;quot;:&amp;quot;div&amp;quot;},&amp;quot;children&amp;quot;:[{&amp;quot;props&amp;quot;:{&amp;quot;setInnerHtml&amp;quot;:&amp;quot;&amp;lt;img src=&amp;#39;&amp;#39;&amp;gt;&amp;lt;/img&amp;gt;&amp;quot;},&amp;quot;nodeType&amp;quot;:&amp;quot;DOM&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;instanceArgs&amp;quot;:{&amp;quot;namespace&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;tag&amp;quot;:&amp;quot;div&amp;quot;},&amp;quot;children&amp;quot;:[]}]})&lt;/unsafe-script&gt;&quot;}}},&quot;children&quot;:[{&quot;props&quot;:{&quot;id&quot;:&quot;out&quot;,&quot;setInnerHtml&quot;:&quot;&lt;div class=&#39;display:none&#39;&gt;&lt;/div&gt;&lt;unsafe-script style=&#39;display:none&#39;&gt;\\nWebIO.mount(this.previousSibling,{&amp;quot;props&amp;quot;:{&amp;quot;attributes&amp;quot;:{&amp;quot;style&amp;quot;:&amp;quot;display:flex; justify-content:center; align-items:center;&amp;quot;}},&amp;quot;nodeType&amp;quot;:&amp;quot;DOM&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;instanceArgs&amp;quot;:{&amp;quot;namespace&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;tag&amp;quot;:&amp;quot;div&amp;quot;},&amp;quot;children&amp;quot;:[{&amp;quot;props&amp;quot;:{&amp;quot;setInnerHtml&amp;quot;:&amp;quot;&amp;lt;img src=&amp;#39;&amp;#39;&amp;gt;&amp;lt;/img&amp;gt;&amp;quot;},&amp;quot;nodeType&amp;quot;:&amp;quot;DOM&amp;quot;,&amp;quot;type&amp;quot;:&amp;quot;node&amp;quot;,&amp;quot;instanceArgs&amp;quot;:{&amp;quot;namespace&amp;quot;:&amp;quot;html&amp;quot;,&amp;quot;tag&amp;quot;:&amp;quot;div&amp;quot;},&amp;quot;children&amp;quot;:[]}]})&lt;/unsafe-script&gt;&quot;},&quot;nodeType&quot;:&quot;DOM&quot;,&quot;type&quot;:&quot;node&quot;,&quot;instanceArgs&quot;:{&quot;namespace&quot;:&quot;html&quot;,&quot;tag&quot;:&quot;div&quot;},&quot;children&quot;:[]}]}]})</unsafe-script>\n",
       "</div>"
      ],
      "text/plain": [
       "(div\n",
       "  Widgets.Widget{:slider}(DataStructures.OrderedDict{Symbol,Any}(:changes=>Observables.Observable{Int64}(\"ob_02\", 0, Any[WebIO.SyncCallback(WebIO.Scope(\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 20),Pair{Symbol,Any}(:min, 1),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(#= circular reference @-7 =#), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Int64}(\"ob_01\", 1, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37)), Observables.g]), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value();},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_02\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_01\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.SyncCallback(WebIO.Scope(\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 20),Pair{Symbol,Any}(:min, 1),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(#= circular reference @-8 =#), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Int64}(\"ob_01\", 1, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37)), Observables.g]), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value();},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_02\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_01\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.#37))]),:value=>Observables.Observable{Int64}(\"ob_01\", 1, Any[WebIO.SyncCallback(WebIO.Scope(\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 20),Pair{Symbol,Any}(:min, 1),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_02\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Int64}(#= circular reference @-7 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value();},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_02\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_01\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.SyncCallback(WebIO.Scope(\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 20),Pair{Symbol,Any}(:min, 1),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_02\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Int64}(#= circular reference @-8 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value();},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_02\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_01\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.#37)), Observables.g])), Observables.Observable{Int64}(\"ob_01\", 1, Any[WebIO.SyncCallback(WebIO.Scope(\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 20),Pair{Symbol,Any}(:min, 1),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_02\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Int64}(#= circular reference @-7 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value();},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_02\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_01\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.SyncCallback(WebIO.Scope(\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 20),Pair{Symbol,Any}(:min, 1),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_02\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Int64}(#= circular reference @-8 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value();},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_02\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_01\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.#37)), Observables.g]), Observables.Observable{Int64}(\"ob_01\", 1, Any[WebIO.SyncCallback(WebIO.Scope(\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 20),Pair{Symbol,Any}(:min, 1),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_02\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Int64}(#= circular reference @-7 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value();},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_02\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_01\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.SyncCallback(WebIO.Scope(\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 20),Pair{Symbol,Any}(:min, 1),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_02\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Int64}(#= circular reference @-8 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value();},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_02\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_01\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.#37)), Observables.g]), WebIO.Scope(\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 20),Pair{Symbol,Any}(:min, 1),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_02\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Int64}(\"ob_01\", 1, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37)), Observables.g]), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value();},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_02\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-70c6fe03-d699-4bda-84ae-acaed5a970fd\\\",\\\"id\\\":\\\"ob_01\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), Widgets.#4, Base.#55)\n",
       "  Widgets.Widget{:slider}(DataStructures.OrderedDict{Symbol,Any}(:changes=>Observables.Observable{Int64}(\"ob_05\", 0, Any[WebIO.SyncCallback(WebIO.Scope(\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 4.0),Pair{Symbol,Any}(:min, -4.0),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 0.1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(#= circular reference @-7 =#), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Float64}(\"ob_04\", -0.1, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37)), Observables.g]), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":-0.1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value().toPrecision(6);},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_05\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_04\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.SyncCallback(WebIO.Scope(\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 4.0),Pair{Symbol,Any}(:min, -4.0),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 0.1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(#= circular reference @-8 =#), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Float64}(\"ob_04\", -0.1, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37)), Observables.g]), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":-0.1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value().toPrecision(6);},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_05\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_04\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.#37))]),:value=>Observables.Observable{Float64}(\"ob_04\", -0.1, Any[WebIO.SyncCallback(WebIO.Scope(\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 4.0),Pair{Symbol,Any}(:min, -4.0),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 0.1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_05\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Float64}(#= circular reference @-7 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":-0.1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value().toPrecision(6);},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_05\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_04\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.SyncCallback(WebIO.Scope(\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 4.0),Pair{Symbol,Any}(:min, -4.0),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 0.1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_05\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Float64}(#= circular reference @-8 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":-0.1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value().toPrecision(6);},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_05\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_04\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.#37)), Observables.g])), Observables.Observable{Float64}(\"ob_04\", -0.1, Any[WebIO.SyncCallback(WebIO.Scope(\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 4.0),Pair{Symbol,Any}(:min, -4.0),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 0.1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_05\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Float64}(#= circular reference @-7 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":-0.1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value().toPrecision(6);},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_05\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_04\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.SyncCallback(WebIO.Scope(\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 4.0),Pair{Symbol,Any}(:min, -4.0),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 0.1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_05\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Float64}(#= circular reference @-8 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":-0.1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value().toPrecision(6);},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_05\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_04\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.#37)), Observables.g]), Observables.Observable{Float64}(\"ob_04\", -0.1, Any[WebIO.SyncCallback(WebIO.Scope(\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 4.0),Pair{Symbol,Any}(:min, -4.0),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 0.1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_05\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Float64}(#= circular reference @-7 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":-0.1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value().toPrecision(6);},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_05\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_04\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.SyncCallback(WebIO.Scope(\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 4.0),Pair{Symbol,Any}(:min, -4.0),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 0.1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_05\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Float64}(#= circular reference @-8 =#), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":-0.1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value().toPrecision(6);},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_05\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_04\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), WebIO.#37)), Observables.g]), WebIO.Scope(\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :label), Any[nothing], Dict{Symbol,Any}(Pair{Symbol,Any}(:className, \"interact \"),Pair{Symbol,Any}(:style, Dict{Any,Any}(Pair{Any,Any}(:padding, \"5px 10px 0px 10px\")))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"text-align:right;width:18%\"))), 2), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :input), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:max, 4.0),Pair{Symbol,Any}(:min, -4.0),Pair{Symbol,Any}(:attributes, Dict{Any,Any}(Pair{Any,Any}(:type, \"range\"),Pair{Any,Any}(Symbol(\"data-bind\"), \"numericValue: value, valueUpdate: 'input', event: {change : function () {this.changes(this.changes()+1)}}\"))),Pair{Symbol,Any}(:step, 0.1),Pair{Symbol,Any}(:className, \"slider slider is-fullwidth\"),Pair{Symbol,Any}(:style, Dict{Any,Any}())), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"flex-grow:1; margin: 0 2%\"))), 1), WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :p), Any[], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"data-bind\"=>\"text: displayedvalue\"))), 0)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"width:18%\"))), 1)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 7), Dict{String,Tuple{Observables.Observable,Union{Bool, Void}}}(Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"changes\", (Observables.Observable{Int64}(\"ob_05\", 0, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37))]), nothing)),Pair{String,Tuple{Observables.Observable,Union{Bool, Void}}}(\"value\", (Observables.Observable{Float64}(\"ob_04\", -0.1, Any[WebIO.SyncCallback(WebIO.Scope(#= circular reference @-7 =#), WebIO.SyncCallback(WebIO.Scope(#= circular reference @-8 =#), WebIO.#37)), Observables.g]), nothing))), Set{String}(), nothing, Any[\"knockout\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout.js\", \"knockout_punches\"=>\"/Users/stevenj/.julia/v0.6/Knockout/src/../assets/knockout_punches.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/all.js\", \"/Users/stevenj/.julia/v0.6/InteractBase/src/../assets/style.css\", \"/Users/stevenj/.julia/v0.6/InteractBulma/src/../assets/main.css\"], Dict{Any,Any}(Pair{Any,Any}(\"_promises\", Dict{Any,Any}(Pair{Any,Any}(\"importsLoaded\", Any[WebIO.JSString(\"function (ko, koPunches) {\\n    ko.punches.enableAll();\\n    ko.bindingHandlers.numericValue = {\\n        init : function(element, valueAccessor, allBindings, data, context) {\\n            var stringified = ko.observable(ko.unwrap(valueAccessor()));\\n            stringified.subscribe(function(value) {\\n                var val = parseFloat(value);\\n                if (!isNaN(val)) {\\n                    valueAccessor()(val);\\n                }\\n            })\\n            valueAccessor().subscribe(function(value) {\\n                var str = JSON.stringify(value);\\n                if ((str == \\\"0\\\") && ([\\\"-0\\\", \\\"-0.\\\"].indexOf(stringified()) >= 0))\\n                     return;\\n                 if ([\\\"null\\\", \\\"\\\"].indexOf(str) >= 0)\\n                     return;\\n                stringified(str);\\n            })\\n            ko.applyBindingsToNode(element, { value: stringified, valueUpdate: allBindings.get('valueUpdate')}, context);\\n        }\\n    };\\n    var json_data = JSON.parse(\\\"{\\\\\\\"changes\\\\\\\":0,\\\\\\\"value\\\\\\\":-0.1}\\\");\\n    var self = this;\\n    function AppViewModel() {\\n        for (var key in json_data) {\\n            var el = json_data[key];\\n            this[key] = Array.isArray(el) ? ko.observableArray(el) : ko.observable(el);\\n        }\\n        \\n        [this[\\\"displayedvalue\\\"]=ko.computed(function () {return this.value().toPrecision(6);},this)]\\n        [this[\\\"changes\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"changes\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"changes\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_05\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"changes\\\"]=false}),self),this[\\\"value\\\"].subscribe((function (val){!(this.valueFromJulia[\\\"value\\\"]) ? (WebIO.setval({\\\"name\\\":\\\"value\\\",\\\"scope\\\":\\\"knockout-component-fc9402c6-44e1-4d5a-bf3a-e94c96d8f62b\\\",\\\"id\\\":\\\"ob_04\\\",\\\"type\\\":\\\"observable\\\"},val)) : undefined; return this.valueFromJulia[\\\"value\\\"]=false}),self)]\\n        \\n    }\\n    self.model = new AppViewModel();\\n    self.valueFromJulia = {};\\n    for (var key in json_data) {\\n        self.valueFromJulia[key] = false;\\n    }\\n    ko.applyBindings(self.model, self.dom);\\n}\\n\")]))),Pair{Any,Any}(\"changes\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"changes\\\"]()) ? (this.valueFromJulia[\\\"changes\\\"]=true, this.model[\\\"changes\\\"](val)) : undefined})\")]),Pair{Any,Any}(\"value\", Any[WebIO.JSString(\"(function (val){return (val!=this.model[\\\"value\\\"]()) ? (this.valueFromJulia[\\\"value\\\"]=true, this.model[\\\"value\\\"](val)) : undefined})\")])), WebIO.ConnectionPool(Channel{Any}(sz_max:9223372036854775807,sz_curr:3), Set{WebIO.AbstractConnection}(), Channel{WebIO.AbstractConnection}(sz_max:32,sz_curr:0))), Widgets.#4, Base.#55)\n",
       "  Observables.Observable{Any}(\"ob_08\", WebIO.Node{WebIO.DOM}(WebIO.DOM(:html, :div), Any[PyPlot.Figure(PyObject <Figure size 640x480 with 1 Axes>)], Dict{Symbol,Any}(Pair{Symbol,Any}(:attributes, Dict(\"style\"=>\"display:flex; justify-content:center; align-items:center;\"))), 1), Any[]))"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fig = figure()\n",
    "xs = linspace(-5,5,1000)\n",
    "@manipulate for step in slider(1:20, value=1), start in slider(-4:0.1:4, value=-0.1)\n",
    "    withfig(fig) do\n",
    "        x = start\n",
    "        local xprev, f, f′\n",
    "        for i = 1:step\n",
    "            xprev = x\n",
    "            f = 2cos(x) - x + x^2/10\n",
    "            f′ = -2sin(x) - 1 + 2x/10\n",
    "            x = x - f/f′\n",
    "        end\n",
    "        plot(xs, 0*xs, \"k-\")\n",
    "        plot(xs, 2cos.(xs) - xs + xs.^2/10, \"b-\")\n",
    "        newf = 2cos(x) - x + x^2/10\n",
    "        plot([xprev, x], [f, 0.0], \"ro\")\n",
    "        plot(x, newf, \"bo\")\n",
    "        plot(xs, f + f′ * (xs - xprev), \"r--\")\n",
    "        plot([x, x], [0, newf], \"k--\")\n",
    "        xlim(minimum(xs), maximum(xs))\n",
    "        ylim(-5,4)\n",
    "        title(\"Newton step $step: f($x) = $newf\")\n",
    "    end\n",
    "end"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you start it anywhere near a root of $f(x)$, Newton’s method can converge extremely quickly: **asymptotically, it doubles the number of accurate digits on each step**.\n",
    "\n",
    "However, if you start it far from a root, the convergence can be hard to predict, and it may not even converge at all (it can oscillate forever around a local minimum).\n",
    "\n",
    "Still, in many practical applications, there are ways to get a good initial guess for Newton, and then it is an extremely effective way to solve nonlinear equations to high accuracy."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## General Multidimensional Newton\n",
    "\n",
    "The general case of the multidimensional Newton algorithm is as follows.  We are solving:\n",
    "\n",
    "$$\n",
    "\\begin{pmatrix}\n",
    "f_1(x_1, \\ldots, x_n) \\\\\n",
    "f_2(x_1, \\ldots, x_n) \\\\\n",
    "\\vdots \\\\\n",
    "f_n(x_1, \\ldots, x_n)\n",
    "\\end{pmatrix}\n",
    "= f(x) = 0\n",
    "$$\n",
    "\n",
    "for $x \\in \\mathbb{R}^n$ and $f(x) \\in \\mathbb{R}^n$: $n$ (possibly nonlinear but differentiable) equations in $n$ unknowns.\n",
    "\n",
    "Given a guess $x$, we want to find an improved guess $x + \\delta$ for $\\delta \\in \\mathbb{R}^n$.   We do this by Taylor-expanding $f$ around $x$ to first order (linear):\n",
    "\n",
    "$$\n",
    "f(x + \\delta) \\approx f(x) + J(x) \\, \\delta  = 0\n",
    "$$\n",
    "\n",
    "where $J$ is the $n \\times n$ Jacobian matrix with entries $\\boxed{ J_{ij} = \\partial f_i / \\partial x_j }$, i.e.\n",
    "\n",
    "$$\n",
    "J = \\begin{pmatrix}\n",
    "\\frac{\\partial f_1}{\\partial x_1} & \\frac{\\partial f_1}{\\partial x_2} & \\cdots \\\\\n",
    "\\frac{\\partial f_2}{\\partial x_1} & \\frac{\\partial f_2}{\\partial x_2} & \\cdots \\\\\n",
    "\\vdots & \\vdots & \\ddots\n",
    "\\end{pmatrix} \\; .\n",
    "$$\n",
    "\n",
    "Hence, we solve the *linear* equation\n",
    "\n",
    "$$\n",
    "J(x) \\, \\delta = -f(x)\n",
    "$$\n",
    "\n",
    "for the Newton step $\\delta$, obtaining (if $J$ is invertible):\n",
    "\n",
    "$$\n",
    "\\boxed{ x + \\delta = x - J(x)^{-1} f(x) }\n",
    "$$\n",
    "\n",
    "Some things to remember:\n",
    "\n",
    "* Newton converts $n$ *nonlinear* equations into repeated solution of $n \\times n$ *linear* equations.\n",
    "\n",
    "* When solving nonlinear equations, coming up with a good initial guess is a bit of an art, that often requires some problem-specific understanding.  A typical trick is to solve a related problem, e.g. a linear problem.  Or to start with a linear problem and to \"turn on\" the nonlinearity gradually, using the solution of each nonlinear problem as the starting guess for the next one.\n",
    "\n",
    "* If you start too far from a root, Newton’s method can sometimes take a large step, far outside the validity of the Taylor approximation, and this can actually make the guess *worse*.  Sophisticated implementations use a variety of techniques to make the convergence more robust, such as a [backtracking line search](https://en.wikipedia.org/wiki/Backtracking_line_search) or a [trust region](https://en.wikipedia.org/wiki/Trust_region).  These techniques are outside the scope of 18.06, though!\n",
    "\n",
    "* There are other methods related to Newton that don't require you to compute $J(x)$ at all.  You only supply $f(x)$ and they either approximate the Jacobian for you directly (e.g. [Broyden’s method](https://en.wikipedia.org/wiki/Broyden's_method)) or implicitly (e.g. [Anderson acceleration](http://epubs.siam.org/doi/abs/10.1137/10078356X)).  There is a rich mathematical literature on solution methods for nonlinear systems of equations, but essentially all the methods have one thing in common: *linear* algebra plays a key role."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Automatic differentiation\n",
    "\n",
    "Computing the Jacobian, while in principle is a simple 18.02 exercise, is often tedious and error prone for large systems of equations.\n",
    "\n",
    "Instead, the Jacobian matrix can often be *automatically* computed from $f(x)$ by the computer using [automatic differentiation](https://en.wikipedia.org/wiki/Automatic_differentiation) tools, saving you from the tedious (and error-prone) task of writing out $J(x)$ manually.  (How this works, involving [dual numbers](https://en.wikipedia.org/wiki/Dual_number), is [really cool](https://arxiv.org/abs/1607.07892), but somewhat outside the scope of 18.06.)\n",
    "\n",
    "In Julia, there are packages [ForwardDiff](https://github.com/JuliaDiff/ForwardDiff.jl) and [ReverseDiff](https://github.com/JuliaDiff/ReverseDiff.jl) to do this for you.\n",
    "\n",
    "For example, let's compute the Jacobian for $$f_\\mathrm{ex}(x) = \\begin{pmatrix} \\sin(x_1 x_2) - 0.5 \\\\ x_1^2 - x_2^2 \\end{pmatrix},$$ which should give $$J_\\mathrm{ex}(x) = \\begin{pmatrix} x_2 \\cos(x_1 x_2) & x_1 \\cos(x_1 x_2) \\\\ 2x_1 & -2x_2 \\end{pmatrix}:$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Jₑₓ (generic function with 1 method)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fₑₓ(x) = [ sin(x[1]*x[2]) - 0.5\n",
    "           x[1]^2 - x[2]^2 ]\n",
    "\n",
    "# manual Jacobian\n",
    "Jₑₓ(x) = [ x[2]*cos(x[1]*x[2])  x[1]*cos(x[1]*x[2])\n",
    "         2x[1]               -2x[2]               ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2-element Array{Float64,1}:\n",
       " -0.779415\n",
       " -5.0     "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fₑₓ([2,3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2×2 Array{Float64,2}:\n",
       " 2.88051   1.92034\n",
       " 4.0      -6.0    "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Jₑₓ([2,3]) # manual Jacobian"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "using ForwardDiff"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2×2 Array{Float64,2}:\n",
       " 2.88051   1.92034\n",
       " 4.0      -6.0    "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ForwardDiff.jacobian(fₑₓ, [2,3]) # automatic Jacobian"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2×2 Array{Float64,2}:\n",
       " 0.0  0.0\n",
       " 0.0  0.0"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ForwardDiff.jacobian(fₑₓ, [2,3]) - Jₑₓ([2,3])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Multidimensional root finding example\n",
    "\n",
    "As a simple example, let's find a root of our test function\n",
    "$$f_\\mathrm{ex}(x) = \\begin{pmatrix} \\sin(x_1 x_2) - 0.5 \\\\ x_1^2 - x_2^2 \\end{pmatrix}$$\n",
    "from above.\n",
    "\n",
    "We can actually solve this analytically. $f_\\mathrm{ex}(x) = 0$ immediately tells us $x_1 = \\pm x_2$ from $x_1^2 - x_2^2 = 0$.  If we let $x = x_1 = x_2$, then $\\sin(x^2) - 0.5$ has its first root at $x = \\sqrt{\\pi/6}$.   We can also see these roots graphically by plotting:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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3GYVVgdJ2fwvgogEElA1FCdGcvLz85GSkoK9e/eG5O3ZsweAPnqVn58Pl8uF/fv3h5Tbt2+f5fude+65mD9/foh1Y/v27QAQsmaU09dbIScnB127dg1Ja9CgQUh6uHzzzTeoqKgIskD5/X5cdtlluOGGG/Dmm2/im2++wYABA3Duueeibdu2ePjhhzFy5Eh8/PHHGDFiBJ566qmAeAKMRxntjDCajSASBEEQznHs2DH069cP119/Pdq0aYOcnBxs2rQpMO84Uvr27QsA+Oyzz4IE1E8//YQBAwagdevWeOutt5CWlobHH38c7du3x2OPPYa//e1vtu7j9/vxn//8B6NGjYq4zSoqKytx++2346OPPsKxY8fQtm1bPPPMM+jVq1fU7knUXiiIBKGkbt266N69O95+++2AvzSg/yH897//jebNm+Pss89G3bp10bVrV7zzzjuorq4OlDtx4oSttYuuuuoqnDhxAm+99VZQ+rx589C0aVN07949qtcnCmyhWV5Abdq0CeXl5fi///s/pKWloUOHDhgyZAjefvttAMDdd9+NjIwMnH/++WjZsmXIpFl+lJGHH2FctWoVrrjiChQXFwetE8IT7RFEgiAI4hSZmZno3r07/vWvf2HYsGEYNGgQZs+ejYkTJ1r2MjGisLAQvXv3xrvvvhtI27t3LwYMGIBGjRrhvffeQ506dQDo/0duvvlmzJgxI2jNKSuUlJTg2LFjGDZsWMRtVuH1etGqVSusW7cOR48exZgxY3D55ZfT4r1EdNAI4jdeeeUVDYC2c+fOQFpJSYmWlpamde/eXVu0aJH27rvvahdeeKHmcrm0BQsWBMp98MEHWkpKita3b19t8eLF2ptvvql1795da9GiheZyuYLuc+ONN2otWrSQtmHgwIFafn6+9tJLL2mffPKJdsstt2gAtH//+99B5UpKSjS3261Nnjw5rOs1TdOWLVumLVq0SHv55Zc1ANqQIUO0RYsWaYsWLdLKy8stf259+vTRbrzxRsvlNU3TWrRooT3yyCPazp07NQDaqlWrAnl33HGHVq9evaDyCxcu1FJTU7W8vLzAVrduXW3cuHGBMnPnztUAaCtXrgy5X2lpqQZAe/HFFwNpO3fu1Jo3b6717t1bq6io0DRN07755hvN7XZr999/f0gdPp9Py8vL0yZMmGDreRjs/dq0aZPp50MQBEHEhjfffFNzu93azz//HLV73HDDDVqvXr2iVr+K/Px8bdu2bTG/L1HzIQFFBJAJKE3TtLVr12r9+/fX6tatq9WpU0fr0aOHtnTp0pDrFy9erJ177rlaenq6dvrpp2uPP/64dtddd2n5+flB5YwE1PHjx7W77rpLa9KkiZaenq516NBBmz9/fki5VatWaQC0Rx55JKzrNU3v9AOQbuJnYITTAqpnz55a//79g8qvW7dOa9++vbK+w4cPa82aNdNuvPFGrVOnTlp1dXVImd69e2sXX3yxpmmatmfPHu3MM8/UOnfurB07diyo3C233KJlZGSEfAYff/yxBkDbvHmzredhkIAiCIJIPPx+v9ajR4+gATkn+eGHH7S0tDRt7dq1UalfxTfffKNlZmZqx48fj+l9idqBS9NoNh0RHTweDzp27IhmzZphxYoVgfSRI0eipKQEP/zwA1wuV61cIZy52Y0cORKtWrXCqlWrAr7oMrxeLzp37oxRo0bh9ttvR0pKCrZt24bc3Fy0bt0aw4YNQ7169fD888+jqKgIF1xwAYqLi4PqeOuttzB06FDs2rULzZo1s93m4cOH43//+5904rLR82i/hX5/9dVXMWrUKGzatMmx+WIEQRBE5Hz55ZeB6H78YutOsGrVKnz//fe49dZbHa3XiIqKCvTp0wdXXnll0ILwBOEUFESCcIxRo0Zh4MCBKCgowL59+/DPf/4T33zzjXQ9oV27diEtLQ3t2rVLmgVu40lqairef/993HPPPXjsscfg8Xhw3nnnYcaMGVi8eDE+++wz/Pe//4XL5cLLL7+MTp064fLLLw9a92nw4MHo1q0bpk2bhueff97W/X/88UcsXLgQn3zyie22v/vuu7jqqqtsX0cQBEHEhvbt2zsSaElGv379LC+r4gQejwfXXnst2rZtiwcffDBm9yVqFySgCMc4fvw47r33Xvz6669IS0tD586dsWzZMgwYMCCoXHFxMe644w4ACExOJcwpLCzEm2++GZLeoUOHIIFSWFiIgwcPhpRzuVyYNWsWlixZAr/fb2uUsbS0FM8//zx+//vf22533759g0K/UxAKgiAIIhr4/X6MGDECbrcbc+bMcWT9R4KQQQKKcIw33njDUrmWLVuGvcAsERnhjjJGMoJYr149ctkjCIIgos5tt92GvXv3Yvny5bTYOxFVkmoO1MyZ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CHdMmAAUFzvPg/roIyeJAZFeOjuBDz5wtsmBMpJVAuqrr77C9u3bk/sffPABmpqaMGDAABx11FGu+zOJJ5lIkh2nasfX2dTLCGN9lM3kyo3IciNsTGFxuv7clrs9zhTCp1oDpdtWCShVdj3ZGidZWnO+nh3PJtrxeLzX/cmLIl4oAeo1UKLgUGXi49vYCCx+n23z77L2MmzOo8PU1lYwqcReNrFixYqU/QcffBC1tbXYuHEjzmK/DBNEpvHUU8ATTzgPyl2+3HXWsM8//xyHHXaY69P+4Ac/wKBBg/Bv//ZvABwn62c/+xmef/55dHR04Pjjj8f999+P0aNHu+47b6msBMaOBdasccL4SECln+3bgZ4eoKoKGDgw6tFkPFkloF577TWcc845yf25c+cCAL7//e9j+fLlrvoyiSBVPd9G1k7Vn6xOVS9rFyZuRJrt2GX1fkVUkOumwhJPOgHFO0Uq8cREEYAU4SQ+34nV83329PQknSedu6RKU86344WAKnmETkDxZarxuHGf/AokL66TqVy3HyR+HCgxcY7KlRdpbW0FAAwYMMDVeQkibXzyyaG1Mjfe6Ey+XbB//370ahCmhgAAIABJREFU69fP9Wl7enrw5z//Gc888wwAYO/evZg8eTLOOeccPP/886itrcV7772H/v37u+477znrrEMC6nvfi3o0+Qe//imEH+9zjawSUFOmTAlloiITS35D+PyG9snahYWbzzSoMXkRUW4FlI140vVpElEqsSQrEwWU6WG6AFIekCs+KJfVM7HV09OD7u7ulNTj7F3lLskcJlFw8fVuBJRKCPFjE8vFsrBEiY2Y8loWBn4EVF1dXUr5/PnzscAQ5pRIJDB37lycccYZGDlypKvzEkRa6OlxJth79zrCaf581128+OKLmDp1akrZCSecoFz795//+Z+47rrr8Oqrr6KwsBDjD661+tWvfoW6ujo8+OCDybb15J5446yzgF/9yhFQRPqh9U+uyOkkEgRBENmOScDqxOvHH3+ckkhn3rx5xvPNmTMHmzdvxhNPPBH2pRGEN/7jP5yMbZWVwGOPASUl2ubd3d3YuHFjStk777yD448/PqXs6aefBgC89NJL2LVrF5qbm1FcXIwnn3wSVx5MVPHMM8/gW9/6VvLHq2eeeQZjxozBxRdfjNraWowaNQrLli0L6krzi0mTHOfj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3TptwoQJ2uDBg7XW1lavzTPl0KFD2pAhQ7SLLrpIO3jwoHb48OHwJxX48ssvtfr6em3x4sVacXGxVl9fr9XX12snTpzw2rQuvPTSS1pubq72zDPPaF988YV26623akVFRdq+ffu8Ns2UEydOhL9XANrDDz+s1dfXa19++aXXplly0003aSUlJdqGDRsiju1Tp055bZold911l7Zx40Zt79692meffaYtWrRIy87O1mpra702jaQ4Vv9F1dXVEdHr3n//fS0nJ0e7//77tf/93//V7r//fs3n82lbtmzxqgtdcNqnmpoa7Z133tH27Nmj1dfXa9dee63m8/m0Dz/80KsudMHqv3fhwoVadXV1uPw//vEPrbCwUFuwYIH2xRdfaM8884yWm5ur/fGPf/SqC0qc9uuRRx7RVq9erf3f//2ftn37dm3hwoUaAG3VqlVedSECO9eZVDynoulXsp9XVtdVL3+njBRQn332mVZVVaWVlpZqeXl52sCBA7V58+ZpBw8e9No0S1asWKEBUH5SgWuuuUZp+/r16702Tcnjjz+uVVRUaH6/Xxs1alRKhNPWQ8jKn2uuucZr0ywxOrZXrFjhtWmWXHfddeFj5Uc/+pE2adIkiifiGmb/RRdeeGGX8/vVV1/Vhg4dquXm5mrDhg1LmptXESd9uvXWW7UBAwaEz6/Jkydrmzdv9sBqY6z+e6+55hrtwgsvjNhnw4YN2siRIzW/368NHDhQe+KJJxJvuAVO+/XAAw9ogwcP1vLz87WePXtqEyZM0N566y1vjFdg5zqTiudUNP1K9vPK6rrq5e+UpWkeRU0ghBBCCCGEkBQjraLwEUIIIYQQQkg8oYAihBBCCCGEEJtQQBFCCCGEEEKITSigCCGEEEIIIcQmFFCEEEIIIYQQYhMKKEIIIYQQQgixCQUUIYQQQgghhNiEAooQQgghhBBCbEIBRQghhBBCCCE2oYAi5HtefPFF5Ofn49ChQ+G0G264Aeeccw6am5s9tIwQQgjpSiKuW15fG71unxAVFFCEfM/s2bMxdOhQLFmyBACwePFirF27Fm+//TZKSko8to4QQgiJxMl16z//8z9RXFxs+tm0aVNMbZjhdfuEuInPawMISRaysrJw3333YcaMGejbty8effRRbNq0CaeffjoAYPr06diwYQMmTZqEP/7xjx5bSwghJNOxum6JzJs3D7NmzTKtT7WfW9fGeLR/4MABVFdX48iRI/D5fLj77rsxc+ZM0zYIcYMsTdM0r40gJJkYNWoUPv/8c9TW1uLCCy8Mp69fvx4nT57Es88+SwFFCCEkaTC6biWijURdG1XtHz58GF999RVGjBiBI0eOYNSoUdi5cyeKioriZgchAIfwERLB2rVrsWPHDnR0dKB3794ReVVVVejWrZtHlhFCCCFdMbtuiUQ7hM6qDbvXxni0X15ejhEjRgAATjvtNJSWlqKpqcnSFkJihR4oQr7nk08+wcSJE/H444/jpZdeQmFhIV599dWIMhs2bMBjjz1GDxQhhBDPsXPd0mlqarIUF6effjoKCgoct2Hn2hjP9gFg69atmDNnDrZv327aBiFuwDlQhADYt28fLr30UixcuBDV1dUYPnw4xo4di23btmH06NFem0cIIYRE4PS6VVpaitLS0ri2YUY82z927BiuvvpqPP30047qJyRa6IEiGU9TUxPOO+88XHDBBVi+fHk4/fLLL0dbWxveeeedcBo9UIQQQrzGyXUrEW3E49pot/22tjZcfPHFmDt3Lqqrq11rnxAzKKAIcQAFFCGEEBKJV9dGTdNw5ZVXYujQoaipqUlo2ySzoYAixCZTpkzBJ598gpaWFpSWlmL16tUYO3as12YRQgghnuHltfG9997DBRdcgHPOOSec9txzz+Hss89OSPskc6GAIoQQQgghhBCbMIw5IYQQQgghhNiEAooQQgghhBBCbEIBRQghhBBCCCE2oYAihBBCCCGEEJtQQBFCCCGEEEKITSigCCGEEEIIIcQmFFCEEEIIIYQQYhMKKEIIIYQQQgixCQUUIYQQQgghhNiEAooQQgghhBBCbEIBRQghhBBCCCE2oYAihBBCCCGEEJv8f0aSUrFJTmIpAAAAAElFTkSuQmCC",
      "text/plain": [
       "PyPlot.Figure(PyObject <Figure size 1000x400 with 3 Axes>)"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "figure(figsize=(10,4))\n",
    "\n",
    "subplot(1,2,1)\n",
    "X = linspace(-3,3,250)\n",
    "pcolor(X', X, [-log(0.01 + norm(fₑₓ([x,y]))) for y in X, x in X], cmap=\"gray\")\n",
    "xlabel(L\"x_1\")\n",
    "ylabel(L\"x_2\")\n",
    "title(L\"-\\log [ 0.01 + \\Vert f_\\mathrm{ex}(x) \\Vert]\")\n",
    "colorbar()\n",
    "\n",
    "subplot(1,2,2)\n",
    "x = linspace(0,3,200)\n",
    "plot(x, sin.(x.^2) .- 0.5, \"r-\")\n",
    "plot(x, 0*x, \"k-\")\n",
    "plot([sqrt(pi/6), sqrt(5pi/6), sqrt(13pi/6)], [0,0,0], \"ro\", markersize=8)\n",
    "text(0.65, -0.23, L\"\\sqrt{\\pi/6}\")\n",
    "title(L\"\\sin(x^2) - \\frac{1}{2}\")\n",
    "xlabel(L\"x = x_1 = x_2\")\n",
    "grid()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here is the coordinate of our first root:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7236012545582676"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sqrt(π/6)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's print out the progress after varying numbers of Newton steps starting at a crude initial guess $x = \\begin{pmatrix} 0.5 \\\\ 0.8 \\end{pmatrix}$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 Newton steps: x = [0.717469, 0.692168], f(x) = [-0.0235532, 0.0356649]\n",
      "2 Newton steps: x = [0.723253, 0.723927], f(x) = [-1.46811e-5, -0.000975152]\n",
      "3 Newton steps: x = [0.723601, 0.723601], f(x) = [-9.82632e-8, 1.55751e-8]\n",
      "4 Newton steps: x = [0.723601, 0.723601], f(x) = [2.10942e-15, -1.55431e-15]\n",
      "5 Newton steps: x = [0.723601, 0.723601], f(x) = [-5.55112e-17, 0.0]\n",
      "6 Newton steps: x = [0.723601, 0.723601], f(x) = [-5.55112e-17, 0.0]\n",
      "7 Newton steps: x = [0.723601, 0.723601], f(x) = [-5.55112e-17, 0.0]\n",
      "8 Newton steps: x = [0.723601, 0.723601], f(x) = [-5.55112e-17, 0.0]\n",
      "9 Newton steps: x = [0.723601, 0.723601], f(x) = [-5.55112e-17, 0.0]\n",
      "10 Newton steps: x = [0.723601, 0.723601], f(x) = [-5.55112e-17, 0.0]\n"
     ]
    }
   ],
   "source": [
    "x = [0.5, 0.8]\n",
    "for i = 1:10\n",
    "    x = x - Jₑₓ(x) \\ fₑₓ(x)  # Newton step\n",
    "    println(\"$i Newton steps: x = $x, f(x) = \", fₑₓ(x))\n",
    "end"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As usual, super fast convergence: **15 decimal places in only four steps!**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## A nonlinear circuit problem\n",
    "\n",
    "Consider the nonlinear circuit graph from the [graphs and networks lecture](http://nbviewer.jupyter.org/github/stevengj/1806-spring17/blob/master/lectures/Graphs-Networks.ipynb):\n",
    "\n",
    "<img src=\"https://github.com/stevengj/1806-spring17/raw/master/lectures/circuit.png\" width=\"300\">\n",
    "\n",
    "The incidence matrix $A$ of this graph is:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8×6 Array{Int64,2}:\n",
       " -1   0   0   1   0   0\n",
       "  0   0   0  -1   1   0\n",
       "  0   0   0   0  -1   1\n",
       "  0   0   1   0   0  -1\n",
       "  0   1  -1   0   0   0\n",
       "  1  -1   0   0   0   0\n",
       "  0  -1   0   0   0   1\n",
       "  0   0   0  -1   0   1"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = [ -1   0   0   1   0   0\n",
    "       0   0   0  -1   1   0\n",
    "       0   0   0   0  -1   1\n",
    "       0   0   1   0   0  -1\n",
    "       0   1  -1   0   0   0\n",
    "       1  -1   0   0   0   0\n",
    "       0  -1   0   0   0   1\n",
    "       0   0   0  -1   0   1 ]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Review: (Linear) circuit equations\n",
    "\n",
    "Recall that if we associate a vector $v$ of voltages with the 6 nodes, then $d = Av$ gives the **voltage rise** across each edge, and $i = -YAv$ gives the **current** through each edge, where $Y$ is a diagonal matrix of admittances (= 1/resistance)\n",
    "\n",
    "$$\n",
    "Y = \\begin{pmatrix} Y_1 &     &        &     \\\\\n",
    "                        & Y_2 &        &     \\\\\n",
    "                        &     & \\ddots &     \\\\\n",
    "                        &     &        & Y_8 \\\\\n",
    "    \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "This is simply an expression of Ohm's law.\n",
    "\n",
    "Furthermore, we showed that Kirchhoff’s current law is just the statement $A^T i = 0$.   Putting it all together, and including a current source term $s$ (an external current flowing out of each node), we obtained the equations:\n",
    "\n",
    "$$\n",
    "A^T Y A v = s\n",
    "$$\n",
    "\n",
    "where to have a solution ($A^T Y A$ is singular) we had to have $s \\perp N(A)$, or equivalently $\\sum_i s_i = 0$: the net current flowing in/out of the circuit must be zero."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Nonlinear Ohm’s law\n",
    "\n",
    "A key physical foundation of the equations above was Ohm’s law: $i_j = -d_j/R_j = - Y_j d_j$, which is the statement that the **current is proportional to the voltage drop** $-d_j$.\n",
    "\n",
    "However, this is only an approximation.  In reality, as the voltage and current increase, the resistance changes.  For example, the resistor heats up (and eventually melts!) due to the dissipated power $i_j^2 / Y_j = Y_j d_j^2$, and resistance depends on temperature.\n",
    "\n",
    "Let's try a **simple model** of a voltage-dependent resistance.  Suppose that we modify Ohm’s law to:\n",
    "\n",
    "$$\n",
    "i_j = - \\underbrace{ \\frac{Y_j }{1 + \\alpha_j d_j^2} }_{\\tilde{Y}_j(d_j)} d_j\n",
    "$$\n",
    "\n",
    "where $\\tilde{Y}_j(d_j) = Y_j / (1 + \\alpha_j d_j^2)$ corresponds to a resistance that increases quadratically with the voltage rise $d_j$.  This model is not unrealistic!   For a real resistor, you could measure the voltage dependence of $Y$, and *fit* it to an equation of this form, and it would be valid for sufficiently small $d_j$!  (The admittance will normally only depend on $d^2$, not on $d$, because with most materials it will not depend on the sign of the voltage drop or current.)\n",
    "\n",
    "The problem, of course, is that with this nonlinear Ohm’s law, the whole problem becomes a **nonlinear system of equations**.  How can we solve such a system of equations?  At first glance, the methods of 18.06 don't work — they are only for *linear* systems.\n",
    "\n",
    "But, we can apply Newton's method as described above, with automatic differentiation via `ForwardDiff`, to solve this by a sequence of linear problems."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Example\n",
    "\n",
    "For an example, let's just set $Y_k = 1$ and $\\alpha_k = 0.5$ for $k=1,\\ldots,6$, and use $s = (1,-1,0,0,0,0)$ as in the previous lecture (current injected into node 2 and extracted out from node 1).\n",
    "\n",
    "What should we use as our initial guess?  How about the solution to the *linear* problem with $\\tilde{Y}(0) = Y$?  That's often a good guess, since in many real problems the nonlinear solution will be very close to the solution of a simplified linear problem.\n",
    "\n",
    "Let's write some code to compute $f(v)$ and $J(v)$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "J (generic function with 1 method)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Yₖ = 1\n",
    "αₖ = 0.5\n",
    "Ỹₖ(d) = Yₖ / (1 + αₖ * d^2)\n",
    "\n",
    "f(v) = A' * (diagm(Ỹₖ.(A*v)) * (A*v)) - [1,-1,0,0,0,0]\n",
    "J(v) = ForwardDiff.jacobian(f, v)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's implement the Newton step $v - J(v)^{-1} f(v)$.\n",
    "\n",
    "I'd ideally like to use `v - J(v) \\ f(v)` in Julia,\n",
    "but the ``` \\ ``` function will complain that `J` is singular, even though `f` is in the column space as discussed below.  There are various ways to do this properly numerically, but for simplicity I will \"cheat\" and use and advanced tool called the [pseudo-inverse](https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_pseudoinverse), computed in julia by `pinv(J)`, which (for a right-hand-side in the column space) will give us a particular solution similar to what we would get from the elimination technique we learned in class.   (We will cover the pseudo-inverse much later in 18.06.)  There are other ways to proceed here that are even more efficient, but `pinv` is the simplest."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "newtonstep (generic function with 1 method)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "newtonstep(v) = v - pinv(J(v)) * f(v)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, let's see what happens.  We'll start by just plotting the voltages as a function of the Newton step, to see how (and whether) it is converging:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "newton (generic function with 2 methods)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function newton(v, nsteps)\n",
    "    for i = 1:nsteps\n",
    "        v = newtonstep(v)\n",
    "    end\n",
    "    return v\n",
    "end\n",
    "newton(v, nsteps::AbstractVector) = map(n -> newton(v,n), nsteps)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkYAAAHHCAYAAABa2ZeMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3XlcVPX+P/DXmRmYAdllXyRETRDcQE3LW+5L1/VaprlVSlldNW5603Ittf3qr9JcMr0Zpt4WrW+aaK6ZqLiUoEVkIsquMiqyzMz5/cEwMjLAjM6cYeD1fDzmAfM5n3POiwmbN5/POZ8RRFEUQURERESQ2TsAERERUUPBwoiIiIhIj4URERERkR4LIyIiIiI9FkZEREREeiyMiIiIiPRYGBERERHpsTAiIiIi0mNhRERERKTHwoiIiIhIj4URERERkR4LIyIJrV+/HoIgQKVS4cKFCzW2P/LII4iJiZEsz+HDh7FgwQJcu3ZNsnNayhEyAsDmzZvRrl07uLi4QBAEnDp1yt6RbOrGjRuYMWMGgoODoVKp0LFjR3zxxRdm7btv3z4IgmDyceTIERsnJ6obCyMiOygrK8Nrr71m7xg4fPgwFi5c2KCLDkfIWFBQgPHjxyMyMhI7d+7Ezz//jDZt2tg7lk2NHDkSGzZswPz587Fjxw506dIFY8aMQVJSktnHWLJkCX7++Wejh5R/GBCZorB3AKKmaODAgUhKSsLLL7+MDh062DsO3aPff/8dFRUVGDduHB5++GGrHbekpASurq5WO561fP/990hOTkZSUhLGjBkDAOjVqxcuXLiAmTNnYvTo0ZDL5fUep3Xr1njggQdsHZfIIhwxIrKDWbNmoXnz5vj3v/9db9+MjAyMHTsW/v7+UCqViIqKwkcffWTYnpaWBkEQsHXrVkNbamoqBEFAu3btjI41dOhQxMXFAQAWLFiAmTNnAgAiIiIMUxn79u0DABw6dAh9+vSBu7s7XF1d0aNHD/zf//1fjXwLFiyAIAhIS0vDmDFj4OnpiYCAADz99NMoLi6u82crKChAQkICwsLCoFQq4efnhwcffBC7d+82K6M5r0/1jCdPnsTIkSPh4eEBT09PjBs3DgUFBWbnMWXSpEl46KGHAACjR4+GIAh45JFHDNstfR1PnDiBUaNGwdvbG5GRkXW+fqIo4uOPP0ZsbCxUKhVatWqF//3vf9DpdIiJicGSJUvq3P9uff3113Bzc8Njjz1m1P7UU0/h8uXLSElJscl5iaTAwojIDtzd3fHaa6/hhx9+wI8//lhrv/T0dHTp0gVnzpzBe++9h++++w6PPvoopk2bhoULFwIA2rVrh6CgIKM37927d8PFxQXp6em4fPkyAECj0WD//v3o27cvAGDy5Mn45z//CQD46quvDFMZnTt3xv79+9G7d28UFxfjk08+waZNm+Du7o4hQ4Zg8+bNJrP+4x//QJs2bfDll1/ilVdeQVJSEl566aU6X4fx48fjm2++wbx587Br1y6sXbsWffv2RVFRUb0ZzX19qhsxYoSheFiwYAG++eYbDBgwABUVFWblMWXu3LmGQqxqamjFihUAcFev48iRI9GqVSts3boVH3/8ca3nFUURo0ePRmJiIiZMmIDvvvsOERERmDRpEtavX4+rV69ixowZJvfTaDRmPWpz5swZREVFQaEwnnRo3769Ybs5XnjhBSgUCnh4eGDAgAE4dOiQWfsR2ZRIRJL59NNPRQDisWPHxLKyMrFly5ZifHy8qNPpRFEUxYcfflhs166dof+AAQPE0NBQsbi42Og4L774oqhSqcQrV66IoiiK48aNE1u2bGnY3rdvX3HKlCmit7e3uGHDBlEURfGnn34SAYi7du0y9HvnnXdEAOL58+eNjv/AAw+I/v7+4vXr1w1tGo1GjImJEUNDQw15RVEU58+fLwIQ3377baNjPP/886JKpTLqeyc3NzdxxowZdb5mtWUURfNfn6qML730klG/zz//XAQgbty40ew8puzdu1cEIG7dutWo/W5ex3nz5pl1znXr1okAxM8//9zQduDAARGA6O3tLa5Zs6bOrOY8TL3moiiKrVu3FgcMGFCj/fLlyyIAccmSJXVmP3HihDh9+nTx66+/Fg8cOCCuW7dOjIqKEuVyubhz506zfn4iW+GIEZGdODs744033sDx48exZcuWGttLS0uxZ88ejBgxAq6urkZ/yQ8ePBilpaWGO3j69OmDP//8E+fPn0dpaSkOHTqEgQMHolevXkhOTgZQOYqkVCoN0z61uXnzJlJSUjBq1Ci4ubkZ2uVyOcaPH4/s7Gz89ttvNfYbOnSo0fP27dujtLQU+fn5tZ6ra9euWL9+Pd544w0cOXLEMHJjDktenypPPvmk0fPHH38cCoUCe/fuvec8d7rb1/Ef//iHWcf/8MMPERMTg7FjxxravL29AQCBgYF46qmnTO4XFxeHY8eOmfUIDg6u9fyCINzVNgDo1KkTli1bhuHDh6Nnz5546qmncPjwYQQFBWHWrFl17ktkayyMiOzoiSeeQOfOnfHqq6/WeBMuKiqCRqPBBx98ACcnJ6PH4MGDAQCFhYUAYJge2717Nw4dOoSKigr07t0bffv2xZ49ewzbHnzwQbi4uNSZ6erVqxBFEUFBQTW2Vb1Rmppaat68udFzpVIJALh161at59q8eTMmTpyItWvXonv37vDx8cGECROQm5tbZ8aqDOa+PlUCAwONnisUCjRv3tzw89xLnjvd7etoqr+pY588eRJDhgwxatdqtQCAxYsX13rxs5ubGzp27GjWw9nZ2eQxqr9m1V25cgUA4OPjU+/PcCcvLy/8/e9/xy+//FLn7wyRrfGuNCI7EgQBb731Fvr164fVq1cbbfP29jaMLrzwwgsm94+IiAAAhIaGok2bNti9ezfuu+8+xMfHw8vLC3369MHzzz+PlJQUHDlyxOR1N3fy9vaGTCZDTk5OjW1V1yv5+vpa+qOa5Ovri2XLlmHZsmXIysrC9u3b8corryA/Px87d+6sN6e5r0+V3NxchISEGJ5rNBoUFRUZirp7yWMq3928jvWNtgDAH3/8AVEUa/x8Vb9DXbp0qXXf/fv3o1evXvWeAwDOnz+P++67r0Z7bGwsNm3aBI1GY3Sd0a+//goAd33LvSiKAMx7DYhshYURkZ317dsX/fr1w6JFixAWFmZod3V1Ra9evXDy5Em0b9++1r/eqx9ny5YtCAsLw6OPPgoAaNOmDVq0aIF58+ahoqLCMLJUxdSoTrNmzdCtWzd89dVXePfddw0jTDqdDhs3bjQUYdbWokULvPjii9izZw9++umnOjMClr8+APD5558b7soDgC1btkCj0RjdRVZfHnPZ8nWsGg2qfkddamqqoTCqKjBMqZpKM0dtU2kjRozAmjVr8OWXX2L06NGG9g0bNiA4OBjdunUz6/jVXb16Fd999x06duwIlUpl8f5E1sLCiKgBeOuttxAXF4f8/HyjW+yXL1+Ohx56CD179sTUqVNx33334fr16/jjjz/w7bffGt3R1qdPH6xYsQKFhYVYtmyZUfunn34Kb29vo6IAqPzLv+o8EydOhJOTE+6//34sXboU/fr1Q69evfDyyy/D2dkZK1aswJkzZ7Bp0yar/EVfXFyMXr16YezYsWjbti3c3d1x7Ngx7Ny5EyNHjqw3o7u7u0WvD1B5Z5tCoUC/fv2QlpaGuXPnokOHDnj88cfNzmMJW72O7dq1g5+fH/7zn//gvvvug0wmQ2JiIkaNGoUvvvgCq1evNiw7cCd3d3fEx8ff1XmrDBo0CP369cPUqVOhVqvRqlUrbNq0CTt37sTGjRuNpvH279+PPn36YN68eZg3bx4AYOzYsWjRogXi4+Ph6+uLjIwMvPfee8jLy8P69evvKRvRPbPrpd9ETUz1u9LuNHbsWBGA0V1poiiK58+fF59++mkxJCREdHJyEv38/MQePXqIb7zxhlG/q1evijKZTGzWrJlYXl5uaK+682rkyJEmM82ePVsMDg4WZTKZCEDcu3evKIqiePDgQbF3795is2bNRBcXF/GBBx4Qv/322xr7V91NVVBQYPJnre3OptLSUvG5554T27dvL3p4eIguLi7i/fffL86fP1+8efOmWRnNfX2qMqampopDhgwR3dzcRHd3d3HMmDFiXl6exXnuVNtdadZ4HWtz6NAhMS4uTnR2dha9vb3F2bNnizqdTkxISBCdnJzElStXmnWcu3X9+nVx2rRpYmBgoOjs7Cy2b99e3LRpU41+Va/N/PnzDW1Lly4VO3bsKHp6eopyuVz08/MTR4wYIR49etSmmYnMIYhiHWOuRESNwIIFC7Bw4UIUFBRY7fooImqceFcaERERkR4LIyIiIiI9TqURERER6XHEiIiIiEiPhRERERGRHgsjIiIiIj0u8FgPnU6Hy5cvw93dncvUExEROQhRFHH9+nUEBwdDJjN/HIiFUT0uX75scvVYIiIiavguXryI0NBQs/uzMKqHu7s7gMoX1sPDw85piIiIyBxqtRphYWGG93FzsTCqR9X0mYeHBwsjIiIiB2PpZTC8+JqIiIhIj4URERERkR4LIyIiIiI9XmNERETkwLRaLSoqKuwdQ3JOTk6Qy+VWPy4LIyIiIgckiiJyc3Nx7do1e0exGy8vLwQGBlp1nUEWRkRERA6oqijy9/eHq6trk1qEWBRFlJSUID8/HwAQFBRktWOzMCIiInIwWq3WUBQ1b97c3nHswsXFBQCQn58Pf39/q02r8eJrIiIiB1N1TZGrq6udk9hX1c9vzWusWBgRERE5qKY0fWaKLX5+TqVRo6bViTh6/gryr5fC312FrhE+kMsa9v9ImFkazCwNZpaGKIq4WaaFRqeDQiZDM6W8wRdNDTUzCyNqtHaeycHCb9ORU1xqaAvyVGH+kGgMjLHehXrWxMzSYGZpMLM0im+V4/K1UlRodYY2J7kMwV4qeLo42zFZ7RpyZkEURdGuCRo4tVoNT09PFBcX87PSHMjOMzmYuvEE7vzlrvpbZOW4zg3uf3LMLA1mlgYz21ZpaSnOnz8P36AQ5NzQ1dovvLlrnYWGPUbHim+V40JRSa3b68tcXdXrEBERAZVKZbTtbt+/OWJEjY5WJ2Lht+k1/ucGACIq/ye3YHs6HmjZ3PA/gKq+hj8TxKovolH77X63j37nviKMO9c4tonjanQi5m5LqzUzAMzbloaoII8GM6SvZWZJMLM0HC2zprwMGq0OeepyQFb7W/nla6VQOclhKvEPablY/H9nkasuM7QFeijx6qNRGNAu0AapK1/LlmEh+Oe/52LkmAmG9jOnTmDSPwbh6z1H4CSPhIfKyW7TahwxqgdHjBq2knINLl8rRW5xKS4X30LOtVKczr6KH88V2DsaEZHNhLjLsaCXP/yDQyEoLJ96OpxZhDd3nKt1+yuD2qJHpG2WAZg8eijuj4rBzAVLDG0JY4YjolUbzH79bQBAS183uKnqH7vhiBHZjT2GW0srtMgpLkXOtVu4XFyK3OLKrznXblW2F5ei+FbDWwa/6o8cwahNMGq73afyG61OhNaMv1EUMqFB/LUKVGbW6JjZ1phZGo6W2VkuqzEKJIoiyjQ1p9UECKg++KLViVhz4M86j7/mwJ/oFOZl1s+qVMjMHt0RRaB122hkZvxmaDu8/0f8ejIVSz9YAwCYMXkcTqT8hL59+uB///ufWce1JhZGVC9bXIxYptFWjvJcK0Wu+hYuXytFTvEtQ1tO8S1cLTGv6HFTKhDkqUKgpwrBni7Q6HT48sSlevfb8HQXdItoXqNIqf7v+3YhY7qwqb7tXvycWYQxa47U2++zZ7qhu43+irMUM0uDmaXhaJlLS0tx7vc/jNrKNDo8vqr+n8EcRTfLMXq1ecdKXzQArs7mlRM3SjVodX8Udn//LYDKYu6Dt17HxOf+iea+fgCAsU8/i+emTMaWTRvvLvw9YmFEdartYsTc4lJM3XjC5MWI5Rod8tSl+lGdW/qpLv1oj366q+hmuVnnd3WWI8hThSBPl8qvXvqvnioEe7kg0FMFD5WT0T5anYjDmUXILS41eb2AACDQU4WHWvk1iL/8AKBrhA+CPFX1Zu4a4SN1tFoxszSYWRqOmNlZIYcok0Fr7yAWaKaUIyo6Bvm5l3HjuhqH9u5GXu5lTJjyvKHPgz0fRu65VLtlZGFEtarvImYAmPm/X3A4s6haIVSKwhtlMOfKNZWTDMGelcVNkKcLgr1uj/oEeakQ5OECDxeFxSMycpmA+UOiMXXjCQjVsgK3R3zmD4luMEURwMxSYWZpMLM0BAHw83A23JWmVMiw5dkHjPqE+bjC08X4j8ej569g0qfH6j3++qe6mFUIujiZ/1EcgiCgZ7dOEAQBv6efwUfvLsFzM2bBtZmboU+wlwp5dlzPiBdf16MpX3xt7tCyKc4KGYI9jQudQE8XBFcb/fFyte1dB464HgkzS4OZpcHMtlP9ouMyUWbRmkBanYiH3vqx3tGxQ//ubbNCMPy+++Dt64+rV67g6x+PQKFQGGXet28fPvzww3qvMeLF1ySp/Oul9XcC0CfKHw+38bs93eWpgk8zZ7uvYDowJgj9ogMdagVbZpYGM0uDmaXh6eIMD5WT2atIN4TRsQ7t2+Pbb7/FfzduQkt/D658TY7B311VfycAkx9q2SAuRjRFLhMabLbaMLM0mFkazCwNQRDMur29ysCYIKwc17nG6FigRKNj27dvt+nx7wULI6qVt6sTZAJQ2x2sDfFiRCIiMk9DHR0bMGAATpw4gZs3byI0NBRff/01unTpItn5WRiRST/9UYjnNqbWWRQBDe9iRCIiMl9DHB374Ycf7Hp+mV3PTg3SlmMXMXHdUVwv1SA+3BvvjGqPIE/jabVAT1WD+twgIiIia+CIERnodCLeS/4NH+3NBAAM7RCMt0e1h8pJjpGdQxvccCsREZG1sTAiAJUfv/Hy1tP47pccAMA/e7dCYr82hjsEGuJwKxERkbWxMCIU3ShDwmepSL1wFQqZgKUjY/FYfJi9YxEREUmOhVETl1lwA0+vP4YLRSXwUCnw8bg49Gjla+9YREREdsHCqAk78mcRnv0sFcW3KhDm44JPJ3VBK393e8ciIiKyGxZGTdRXJ7Lx7y9/QYVWRKcWXlgzIR6+bkp7xyIiIrIrFkZNjCiKWLY7A8v3ZAAAHo0NwnuPd4DKgg8BJCIiaqxYGDUhZRotXvnyV3x98hIA4LmHIzFrwP2Q8bZ7IiIiACyMmoxrJeVI+CwVR89fgVwm4I3hMRjTtYW9YxERETUoLIyagL8Kb+Lp9cfwZ+FNuCsVWDGuM3q29rN3LCIisjedFrhwGLiRB7gFAOE9AFnTvrSChVEjd/yvK5jy3+O4WlKBEC8XrJvUBfcH8s4zIqImL307sPPfgPry7TaPYGDgW0D0UPvlsjN+Vlojtv30ZYxdm4KrJRVoH+qJr5/vwaKIiIgqi6ItE4yLIgBQ51S2p2+32an9/f2xdu1ao7Zjx45BqVQiMzPTZuc1F0eMGiFRFPHR3j/w7q7fAQD9ogOw/ImOcHXmf24iokZLFIGKkvr76bTAjlkARFMHASBUjiS1fMS8aTUnV0Aw/yaemJgYpKWlGbXNnj0bCQkJiIyMNPs4tsJ3ykamXKPDq1//iq2p2QCAyQ9FYPbgKH7gKxFRY1dRAiwJtsKBxMqRpDfN/GioOZcB52ZmHz02Nhbp6emG57t27UJKSgqSkpJw8eJFjB8/Hvn5+VAoFJg7dy4ee+wxS3+Ae8LCqBEpvlWBqRtTcTizCDIBWDi0HcZ3v8/esYiIiAxiYmLw5ZdfAqic4ZgzZw5mzpwJf39/5OTkYNmyZejYsSPy8/PRuXNnDB48GM2amV943SsWRo3ExSsleGr9MfyRfwPNnOX4cGxn9Grrb+9YREQkFSfXytGb+lw4DHw+qv5+T/6v8i41c85rgdjYWFy6dAlqtRo7duxAdnY2EhMTAQBBQUEICgoCUHktko+PD65cucLCiCxzMusqJm84jqKb5Qj0UOGTSfFoF+xp71hERCQlQTBvSiuyd+XdZ+ocmL7OSKjcHtnbJrfux8TEQBAEnD59GnPnzsX8+fPh5uZWo9/x48eh0+kQFmbmlJ6V8K40B7fj1xw8sfoIim6WIzrIA9+88CCLIiIiqp1MXnlLPgDgzutP9c8Hvmmz9Yzc3NwQHh6OWbNmAQCmTJlSo09RUREmTJiA1atX2yRDXVgYOShRFLFqfyamfn4CZRoderf1x9bnuiPQU2XvaERE1NBFDwUe/y/gEWTc7hFc2W7jdYxiY2Nx5MgRLF68GAqF8eRVWVkZRowYgdmzZ6NHDzOm8qyMU2kOqEKrw7xtadh0NAsAMLF7OOb+PRoKOetcIiIyU/RQoO2jdln5evt20+skiaKISZMmoXfv3hg/frzNc5jCwsjBqEsr8MLnJ3AwoxCCAMz7ezSeejDC3rGIiMgRyeRARE97pzD46aefsHnzZrRv3x7ffPMNAOCzzz5DbGysZBlYGDmQS9du4elPj+G3vOtwcZLj/43phH7RAfaORUREZBUPPfQQdDqdXTOwMHIQv2YX4+kNx1BwvQx+7kqsm9gFsaG8yJqIiMiaWBg5gF1puZj+xSncqtCibaA7PpnUBSFeLvaORURE1OiwMGrARFHEup/+whv/lw5RBP7Wxg8fje0Ed5WTvaMRERE1SiyMGiiNVofXv0vHhp8vAADGdmuBhUPbwYl3nhEREdkMC6MG6EaZBv9MOoG9vxVAEIDZg9piSs+WECz49GIiIiKyHAujBia3uBRPrz+G9Bw1lAoZlo3uiEGxQfXvSERERPeMhVEDkna5GM+sP45cdSl83ZyxZkI8OrXwtncsIiKiJoOFkR1odSKOnr+C/Oul8HdXoWuED/b/no8Xk06ipFyL1v5uWDepC8J8LPvEYiIiIro3LIwktvNMDhZ+m46c4lJDm4dKgeulGogAHmzVHCuejIOnC+88IyIikhoLIwntPJODqRtPQLyjXV2qAQD0iGyOTyd1hbOCd54REZHtaXVanMg/gYKSAvi5+qGzf2fIJfistIaMhZFEtDoRC79Nr1EUVXe+8CbkMt55RkREtrf7wm68efRN5JXkGdoCXAPwStdX0De8rx2T2ReHJiRy9PwVo+kzU3KKS3H0/BWJEhERUVO1+8JuJO5LNCqKACC/JB+J+xKx+8Jum53b398fa9euNWo7duwYlEolMjMzbXZec3HESCL51+suiiztR0REVJ0oiriluVVvP61Oi6VHl0I0MYdR1fbm0TfRLbCbWdNqLgoXi9bZi4mJQVpamlHb7NmzkZCQgMjISLOPYyssjCTi766yaj8iIqLqbmluoVtSN6scK68kDz2+6GFW35SxKXB1Mv8u6tjYWKSnpxue79q1CykpKUhKSsL169fRu3dvVFRUQKvVYtq0aZgyZYrF+e+Fw02lrVixAhEREVCpVIiLi8PBgwfN2u+LL76AIAgYPny4jROa1jXCB0GeKtRWUwsAgjwrb90nIiJqrKqPGImiiDlz5mDmzJnw9/eHq6sr9u/fj1OnTiElJQVLly5FUVGRpPkcasRo8+bNmDFjBlasWIEHH3wQq1atwqBBg5Ceno4WLVrUut+FCxfw8ssvo2fPnhKmNSaXCZg/JBpTN56AABgNYFYVS/OHRPPiayIiuisuChekjE2pt19qXiqe3/N8vf1W9FmBuIA4s85ridjYWFy6dAlqtRo7duxAdnY2EhMTAQByuRyurpWjT6WlpdBqtRDFum5bsj6HGjF6//338cwzz2Dy5MmIiorCsmXLEBYWhpUrV9a6j1arxZNPPomFCxeiZcuWEqataWBMEFaO64xAT+PpskBPFVaO64yBMfzoDyIiujuCIMDVybXeR4/gHghwDYBQyxyGAAGBroHoEdzDrONZ+jmeMTExEAQBp0+fxty5czF//ny4ubkZtl+7dg0dOnRAaGgoZs2aBV9f33t6XSzlMCNG5eXlSE1NxSuvvGLU3r9/fxw+fLjW/RYtWgQ/Pz8888wzZk27lZWVoayszPBcrVbffWgTBsYEoV90YI2VrzlSREREUpDL5Hil6ytI3JcIAYLRRdhVxdK/u/7bZusZubm5ITw8HLNmzQKAGtcQeXl54fTp08jLy8PIkSMxatQoBAQE2CSLKQ4zYlRYWAitVlvjxQkICEBubq7JfX766Sd88sknWLNmjdnnWbp0KTw9PQ2PsLCwe8ptilwmoHtkcwzrGILukc1ZFBERkaT6hvfF+4+8D39Xf6P2ANcAvP/I+zZfxyg2NhZHjhzB4sWLoVCYHqMJCAhA+/btceDAAZtmuZPDjBhVuXPIThRFk8N4169fx7hx47BmzRqLhuFmz55tmOsEKkeMbFEcERER2VPf8L7oFdbLLitfb9++3WR7Xl4eXFxc4OHhAbVajQMHDmDq1Kk2z1OdwxRGvr6+kMvlNUaH8vPzTQ6xZWZm4q+//sKQIUMMbTqdDgCgUCjw22+/mVwvQalUQqlUWjk9ERFRwyOXydElsIu9YxhkZ2fjmWeegSiKEEURL774Itq3by9pBocpjJydnREXF4fk5GSMGDHC0J6cnIxhw4bV6N+2bVv8+uuvRm2vvfYarl+/juXLl3MUiIiIqIGJi4vDqVOn7JrBYQojAEhMTMT48eMRHx+P7t27Y/Xq1cjKysJzzz0HAJgwYQJCQkKwdOlSqFQqxMTEGO3v5eUFADXaiYiIiAAHK4xGjx6NoqIiLFq0CDk5OYiJicH333+P8PBwAEBWVhZkMoe5npyIiIgaGEGUeuUkB6NWq+Hp6Yni4mJ4eHjYOw4RERFKS0tx/vx5wydBNFV1vQ53+/7N4RUiIiIiPRZGRERERHosjIiIiIj0WBgRERER6bEwIiIiItJjYURERESkx8KIiIiISM+hFngkIiIi6xG1WpQcT4WmoAAKPz+4xsdBkNv+Q2QbMo4YERERNUHqXbvwR5++yJo4EZdffhlZEyfijz59od61y6bn9ff3x9q1a43ajh07BqVSiczMTJue2xwsjIiIiJoY9a5duDR9BjS5uUbtmrw8XJo+w6aBYamnAAAgAElEQVTFUUxMDNLS0ozaZs+ejYSEBERGRtrsvObiVBoREVEjIIoixFu36u+n1SLvjcWAqU8EE0VAAPIWL0Gz7t3NmlYTXFwgCILZOWNjY5Genm54vmvXLqSkpCApKcnQVlJSgqioKDz22GN49913zT62NbAwIiIiagTEW7fwW+c4KxyocuTo9y5dzep+/4lUCK6uZh8+JiYGX375ZeWpRBFz5szBzJkz4e/vb+izePFidOvWzbLcVsKpNCIiIpJMbGwsLl26BLVajS1btiA7OxuJiYmG7RkZGTh37hwGDx5sl3wcMSIiImoEBBcX3H8itd5+JceP42LCs/X2C1u9Cq7x8Wad1xIxMTEQBAGnT5/G3LlzMX/+fLi5uRm2v/zyy3jnnXdw+PBhi45rLSyMiIiIGgFBEMya0mr24INQBAZCk5dn+jojQYAiIADNHnzQJrfuu7m5ITw8HLNmzQIATJkyxbBt27ZtaNOmDdq0acPCiIiIiGxPkMsRMGc2Lk2fAQiCcXGkv4g6YM5sm65nFBsbi2+//RZbtmyBQnG7FDly5Ai++OILbN26FTdu3EBFRQU8PDwwb948m2W5kyCKpspFqqJWq+Hp6Yni4mJ4eHjYOw4RERFKS0tx/vx5REREQKVS3dUx1Lt2IW/JUqNb9hWBgQiYMxse/ftbK+pdW79+Pc6cOVPnXWl1vQ53+/7NESMiIqImyKN/f7j36cOVr+/AwoiIiKiJEuRyNOtm3m35Ups0aZJdzsvb9YmIiIj0WBgRERER6bEwIiIiItJjYURERESkx8KIiIiISI+FEREREZEeCyMiIiIiPRZGRERERHosjIiIiIj0WBgRERER6fEjQYiIiJoonU5ETsY13FSXoZmHEkGtvSCTCfaOZVcsjIiIiJqgzJP5OLg5AzevlRnamnkp0XN0a0R28rdjMvviVBoREVETk3kyHztXnTEqigDg5rUy7Fx1Bpkn8212bn9/f6xdu9ao7dixY1AqlcjMzLTZec3FESMiIqJGQBRFaMp19fbT6UQc3Px7nX0Obs5AaFsfs6bVFM4yCIL5028xMTFIS0szaps9ezYSEhIQGRlp9nFshYURERFRI6Ap12H19P1WOdbNa2VY+9IBs/omLH8YTkq52ceOjY1Fenq64fmuXbuQkpKCpKQkAIBCoUBMTAwAID4+vsbokq2xMCIiIiLJxMTE4MsvvwRQOco1Z84czJw5E/7+ldc1eXl54dSpU3bLx8KIiIioEVA4y5Cw/OF6+13OuIbvPjxdb7+/v9gBwa29zDqvJWJjY3Hp0iWo1Wrs2LED2dnZSExMtOgYtsTCiIiIqBEQBMGsKa2waB8081LWuPC6OjdvJcKizbvGyFIxMTEQBAGnT5/G3LlzMX/+fLi5uRm2q9VqxMXFwcXFBYsXL8bDD9df7FkT70ojIiJqQmQyAT1Ht66zz0OPt7bZekZubm4IDw/HrFmzAABTpkwx2v7XX38hNTUVH3/8MSZMmAC1Wm2THLVhYURERNTERHbyx8BnY9DMS2nU7uatxMBnY2y+jlFsbCyOHDmCxYsXQ6EwnrwKDg4GUDmyFB0djd9/r/sOOmvjVBoREVETFNnJHxEd/Oyy8vX27dtNtl+9ehWurq5QKpXIzs5Geno6WrZsafM81bEwIiIiaqJkMgEh93vbO4bB2bNn8eyzz0Imq1wbafny5fDx8ZE0AwsjIiIiahB69OiBX3/91a4ZeI0RERERkR4LIyIiIiI9FkZEREREeiyMiIiIiPRYGBERERHpsTAiIiIi0mNhRERERKTHwoiIiIhIj4URERERkR5XviYiImqidDotLp1Nw41rV+Hm5Y2QqHaQyeT2jmVXLIyIiIiaoIyUw/hx/WrcuFJoaHPz8UXvSQlo3a2HHZPZF6fSiIiImpiMlMPY/v4So6IIAG5cKcT295cgI+Wwzc7t7++PtWvXGrUdO3YMSqUSmZmZNjuvuThiRERE1AiIoghNWVm9/XQ6LX78dFWdfX5cvwotYjuYNa2mUCohCILZOWNiYpCWlmbUNnv2bCQkJCAyMtLs49gKCyMiIqJGQFNWhv83cZRVjnXjShE+fGq0WX2nbfgfnFQqs48dGxuL9PR0w/Ndu3YhJSUFSUlJAIDz58/j6aefRl5eHuRyOY4cOYJmzZpZ9gPcA06lERERkWSqjxiJoog5c+Zg5syZ8Pf3BwBMmjQJixYtQnp6Ovbv3w+lUilpPo4YERERNQIKpRLTNvyv3n7ZZ8/gqzcX1Ntv5CsLEBoVY9Z5LREbG4tLly5BrVZjx44dyM7ORmJiIgAgLS0NTk5O6NmzJwDAx8fHomNbAwsjIiKiRkAQBLOmtMI7dIKbj2+NC6+rc2/ui/AOnWxy635MTAwEQcDp06cxd+5czJ8/H25ubgCAjIwMuLm5YejQocjOzsaoUaMwZ84cq2eoC6fSiIiImhCZTI7ekxLq7NNrYoLN1jNyc3NDeHg4Zs2aBQCYMmWKYVtFRQUOHjyIjz76CD///DOSk5ORnJxskxy1YWFERETUxLTu1gNDE+fAzcfXqN29uS+GJs6x+TpGsbGxOHLkCBYvXgyF4vbkVWhoKLp06YKwsDAolUoMHjwYp06dsmmWO3EqjYiIqAlq3a0HIrt0s8vK19u3bzfZ3qVLF+Tl5eHq1avw9PTEgQMH8Oyzz9o8T3UsjIiIiJoomUyOsHbt7R3DQKFQYMmSJfjb3/4GURTRv39//P3vf5c2g6U7XLx4EYIgIDQ0FABw9OhRJCUlITo6GgkJdc9ZEhEREdVl0KBBGDRokN3Ob/E1RmPHjsXevXsBALm5uejXrx+OHj2KOXPmYNGiRVYPSERERCQViwujM2fOoGvXrgCALVu2ICYmBocPH0ZSUhLWr19v7Xw1rFixAhEREVCpVIiLi8PBgwdr7btmzRr07NkT3t7e8Pb2Rt++fXH06FGbZyQiIiLHZHFhVFFRYViFcvfu3Rg6dCgAoG3btsjJybFuujts3rwZM2bMwKuvvoqTJ0+iZ8+eGDRoELKyskz237dvH8aMGYO9e/fi559/RosWLdC/f39cunTJpjmJiIjIMVlcGLVr1w4ff/wxDh48iOTkZAwcOBAAcPnyZTRv3tzqAat7//338cwzz2Dy5MmIiorCsmXLEBYWhpUrV5rs//nnn+P5559Hx44d0bZtW6xZswY6nQ579uyxaU4iIiJyTBYXRm+99RZWrVqFRx55BGPGjEGHDh0AVN56VzXFZgvl5eVITU1F//79jdr79++Pw4cPm3WMkpISVFRU1LnEeFlZGdRqtdGDiIiImgaL70p75JFHUFhYCLVaDW9vb0N7QkICXF1drRquusLCQmi1WgQEBBi1BwQEIDc316xjvPLKKwgJCUHfvn1r7bN06VIsXLjwnrISERFJQafT2TuCXdni57+rdYxEUURqaioyMzMxduxYuLu7w9nZ2aaFURVBEGpkubPNlLfffhubNm3Cvn37oKrjs2Rmz55t+DA7AFCr1QgLC7v7wERERFbm7OwMmUyGy5cvw8/PD87Ozma9FzYWoiiivLwcBQUFkMlkcHZ2ttqxLS6MLly4gIEDByIrKwtlZWXo168f3N3d8fbbb6O0tBQff/yx1cJV5+vrC7lcXmN0KD8/v8Yo0p3effddLFmyBLt370b79nUvZKVUKg0XlxMRETVEMpkMERERyMnJweXLl+0dx25cXV3RokULyGTW+4Qziwuj6dOnIz4+HqdPnza62HrEiBGYPHmy1YLdydnZGXFxcUhOTsaIESMM7cnJyRg2bFit+73zzjt444038MMPPyA+Pt5m+YiIiKTk7OyMFi1aQKPRQKvV2juO5ORyORQKhdVHyiwujA4dOoSffvqpxrBVeHi4zW+DT0xMxPjx4xEfH4/u3btj9erVyMrKwnPPPQcAmDBhAkJCQrB06VIAldNnc+fORVJSEu677z7DaJObmxvc3NxsmpWIiMjWBEGAk5MTnJyc7B2l0bC4MNLpdCYr0+zsbLi7u1slVG1Gjx6NoqIiLFq0CDk5OYiJicH333+P8PBwAEBWVpbRcNqKFStQXl6OUaNGGR1n/vz5WLBggU2zEhERkeMRRFEULdlh9OjR8PT0xOrVq+Hu7o5ffvkFfn5+GDZsGFq0aIFPP/3UVlntQq1Ww9PTE8XFxfDw8LB3HCIiIjLD3b5/W1wYXb58Gb169YJcLkdGRgbi4+ORkZEBX19fHDhwAP7+/haHb8hYGBERETmeu33/tngqLTg4GKdOncKmTZtw4sQJ6HQ6PPPMM3jyySfh4uJi6eGIiIiIGgyLR4yaGo4YEREROR7JRoy2b99usl0QBKhUKrRq1QoRERGWHpaIiIjI7iwujIYPHw5BEHDnQFNVmyAIeOihh/DNN98YfWQIERERUUNn8VKRycnJ6NKlC5KTk1FcXIzi4mIkJyeja9eu+O6773DgwAEUFRXh5ZdftkVeIiIiIpu5q5WvV69ejR49ehja+vTpA5VKhYSEBKSlpWHZsmV4+umnrRqUiIiIyNYsHjHKzMw0eRGTh4cH/vzzTwBA69atUVhYeO/piIiIiCRkcWEUFxeHmTNnoqCgwNBWUFCAWbNmoUuXLgCAjIwMhIaGWi8lERERkQQsnkr75JNPMGzYMISGhiIsLAyCICArKwstW7bEtm3bAAA3btzA3LlzrR6WiIiIyJbuah0jURTxww8/4Pfff4coimjbti369etn9DlljQXXMXJsolaLkuOp0BQUQOHnB9f4OAhyub1j1YmZpcHM0mBmaTBzTZJ9JEhTw8KokiP+o1Pv2oW8JUuhyc01tCkCAxEwZzY8+ve3Y7LaMbM0mFkazCwNZq7lHFIWRjdv3sT+/fuRlZWF8vJyo23Tpk2z9HANGgsjx/1Hd2n6DODOX29BAACELF/W4LIzszSYWRrMLA1mruM8UhVGJ0+exODBg1FSUoKbN2/Cx8cHhYWFcHV1hb+/v+HOtMaiqRdGjviPTtRq8UefvkaFnBFBgCIgAK327G4wo17MLA1mlgYzS4OZ6yZZYfTII4+gTZs2WLlyJby8vHD69Gk4OTlh3LhxmD59OkaOHGlx+IasKRdG9f4CA1D4+aHFZ/8FdCJETQWg1ULUaCBWaCqfazSVz/Vt0Gqqbb+jT1WbVlPZVq2PqNEAhu3ayv0qqh276lgVGmivX0fFxYv1/nwyLy/InJ3reRHufqZZhPn7iuXl0BWr6+0n8/SAUF9miTCzNJhZGswsDXMzt9iwAc26db2nc0n2WWmnTp3CqlWrIJfLIZfLUVZWhpYtW+Ltt9/GxIkTG11h1FSJogj1jp11FkUAoCkowJ8DB0mUyrp0165BZ+8QFjLnfygNDTNLg5mlwczS0FRbEkhqFhdGTk5OEPTTKAEBAcjKykJUVBQ8PT2RlZVl9YBke7rycpT/8QdKz55D6blzKDt7FqXnzkF344Z5B3B2hkylgqBQGB5wUkBQOEGQy42fV+9T7fvbfar3k+v76J87VdtPfsdzhZPhedkffyD/7XfqjR34+iK4xMTc46sHw7Tivbj16xnkmrHEReDrr8Ml1gqZrYCZpcHM0mBmaZibWeHnJ0Ea0yyeSuvfvz8mTZqEsWPH4rnnnsPJkycxbdo0fPbZZ7h69SpSUlJsldUuGttUmra4GKXnfkPZubMoTa8sgMoyMwGNpmZnuRzQaus9pjWGPK3JMAWYl2d6Kqwhz7szs00xszSYWRrMXLe7ff+2eOGhJUuWICgoCADw+uuvo3nz5pg6dSry8/OxatUqSw9HNiKKIsqzL+H67t0o+OBDXHzhRfzRuw9+7/YAsiZORN7SN1G8bRvKfvsN0Ggg8/SEa7du8Jk0CcFvvYmIbdtwf+pxKAIDax8REQQoAgPhGh8n7Q9XD0EuR8Cc2fond2SvGu2cM7vB/I8CYGapMLM0mFkazGwbXMeoHrYYMbL2mkBieTnK/vwTpWfPVY4E6afEdGrT88pOoaFQRbWFsm1bqKKioGrbFoqgIMMUaXWGu9IA4+q+Ad+VVsVRlxlgZttjZmkwszSYuZZzSHVXWu/evfHVV1/By8urRoDhw4fjxx9/tORwDZ61C6N7/WXQXr+OsnPnUHr2dgFU9scfQEVFzc5OTlC2agVV27a3C6G2bSG38OdwxH90VRxxYUpmlgYzS4OZpcHMNUlWGMlkMuTm5sLf39+oPT8/HyEhIagw9QbtwKxZGFmyJpAoitDk5KBUXwRVFkPnUJGdbfLYMg+PagVQVOXXli2tdoumI/6jIyKipsvmt+v/8ssvhu/T09ORW230QKvVYufOnQgJCTH7xE2NqNUib8lS0xeb6dty5s5DyfFUlP3+O8rOnoW2uNjksZyCg6HUT4FVFUJOIcEmp8KsRZDLG9QF1kRERLZgdmHUsWNHCIIAQRDQu3fvGttdXFzwwQcfWDVcY1JyPLXeNYF0xcW4+t//3m5QKKCMjISqbVsoo9pCFRUNVdv7Iff0tHFaIiKipsnswuj8+fMQRREtW7bE0aNH4VdtjQFnZ2f4+/tDzqmVWpm7WFWzhx6Cx6BBUEW1hXOrVvWvzExERERWY3ZhFB4eDgDQ6RxtreCGwdzFqppPmcIpKyIiIjsxqzDavn272QccOnToXYdpzFzj46AIDKx3UauGtiYQERFRU2JWYTR8+HCzDiYIArRmrJTcFFUtanVp+ozKu9BMrAlk70WtiIiImjqzVr7W6XRmPVgU1c2jf3+ELF8GRUCAUbsiIKBBL5RIRETUVFj8IbJ0bzz694d7nz5cE4iIiKgBuqvCaP/+/Xj33Xdx9uxZCIKAqKgozJw5Ez179rR2vkaJawIRERE1TBZ/iOzGjRvRt29fuLq6Ytq0aXjxxRfh4uKCPn36ICkpyRYZiYiIiCRh8UeCREVFISEhAS+99JJR+/vvv481a9bg7NmzVg1ob7b4EFkiIiKyrbt9/7Z4xOjPP//EkCFDarQPHToU58+ft/RwRERERA2GxYVRWFgY9uzZU6N9z549CAsLs0ooIiIiInuw+OLrf/3rX5g2bRpOnTqFHj16QBAEHDp0COvXr8fy5cttkZGIiIhIEhYXRlOnTkVgYCDee+89bNmyBUDldUebN2/GsGHDrB6QiIiISCoWX3zd1PDiayIiIscj2cXXTz31FPbs2QPWU0RERNTYWFwYFRUV4dFHH0VoaCj+9a9/4eTJk7bIRURERCQ5iwuj7du3Izc3F/Pnz0dqairi4+MRHR2NJUuW4K+//rJBRCIiIiJp3PM1RtnZ2di0aRPWrVuHjIwMaDQaa2VrEHiNERERkeOR7Bqj6ioqKnD8+HGkpKTgr7/+QsAdnxpPRERE5EjuqjDau3cvpkyZgoCAAEycOBHu7u749ttvcfHiRWvnIyIiIpKMxesYhYaGoqioCAMGDMCqVaswZMgQqFQqW2QjIiIikpTFhdG8efPw2GOPwdvb2xZ5iIiIiOzG4sIoISHBFjmIiIiI7O6eLr4mIiIiakxYGBERERHpsTAiIiIi0mNhRERERKR3V4XRZ599hgcffBDBwcG4cOECAGDZsmXYtm2bVcMRERERScniwmjlypVITEzE4MGDce3aNWi1WgCAl5cXli1bZvWARERERFKxuDD64IMPsGbNGrz66quQy+WG9vj4ePz6669WDUdEREQkJYsLo/Pnz6NTp0412pVKJW7evGmVUERERET2YHFhFBERgVOnTtVo37FjB6Kjo60SioiIiMgeLF75eubMmXjhhRdQWloKURRx9OhRbNq0CUuXLsXatWttkZGIiIhIEhYXRk899RQ0Gg1mzZqFkpISjB07FiEhIVi+fDmeeOIJW2RsdHQ6ETkZ13BTXYZmHkoEtfaCTCbYO1adHDEz4Ji5mVkazCwNZpYGM1uPIIqieLc7FxYWQqfTwd/f35qZGhS1Wg1PT08UFxfDw8Pjno+XeTIfBzdn4Oa1MkNbMy8leo5ujchODfN1dMTMgGPmZmZpMLM0mFkazGza3b5/31Nh1BRYszDKPJmPnavO1Lp94LMxDe6X2BEzA46Zm5mlwczSYGZpMHPt7vb926yptE6dOkEQzBveOnHihNknb0p0OhEHN2fU2efQlgxEdPBrEEOJAKDV6urNfHBzBlpEN7+duSr6HU9R7fdHuOMbc3+3zOWIrzUzS4OZpcHM0mBm2zBrxGjhwoWG70tLS7FixQpER0eje/fuAIAjR44gLS0Nzz//PJYuXWq7tHZgrRGjS79dxTf/OVlvP/9wdyhdFRBFQBRFiLrKr9A/1+kAiGKN7aJYrV0nGtoM++qq7VNfe/Vj2ksthZVgos/tvpXfiKIInbb+8DKF0KD+Z6HTMLOtMbM0mFkajTnz8Jc6IeR+73s6l01HjObPn2/4fvLkyZg2bRpef/31Gn0uXrxo9ombmpvqsvo7Aci/cN3GSRyEaPQFVVVa3f+cLKvkdBoROgv3sTdmlgYzS4OZpeGImc19z7QFi+9K27p1K44fP16jfdy4cYiPj8e6deusEqyxaeahNKtf5wEt4BPsBkHQTzEJgEwmGL4XZIJhm6GPzPi5oO8H/XNZte8NfWS3j199n+rnzf2zuM554CqPvtAewa28ahYxpv4dGgoe48rHVN8ag5li9W3GjdW75v5ZjF1r0+rN3e/paAS29Ky3nxRy/yxG8rr0evsx871hZmkwszQac2Zz3zNtweLCyMXFBYcOHULr1q2N2g8dOgSVSmW1YLVZsWIF3nnnHeTk5KBdu3ZYtmwZevbsWWv/L7/8EnPnzkVmZiYiIyOxePFijBgxwuY57xTU2gvNvJRGV+Dfyc1biW7DIhvMkGdEBz+zMrdo17zBZAYq72xo5vVHvblbxQc0mNxuPioc/iqTmW2MmaXBzNJozJmDWntJmMqYxStfz5gxA1OnTsWLL76IjRs3YuPGjXjxxRfxwgsv4KWXXrJFRoPNmzdjxowZePXVV3Hy5En07NkTgwYNQlZWlsn+P//8M0aPHo3x48fj9OnTGD9+PB5//HGkpKTYNKcpMpmAnqNb19nnocdbN5hfXsAxMwOOmZuZpcHM0mBmaTCzbdzV7fpbtmzB8uXLcfbsWQBAVFQUpk+fjscff9zqAavr1q0bOnfujJUrVxraoqKiMHz4cJMXfY8ePRpqtRo7duwwtA0cOBDe3t7YtGmTWeeUYh0jN28lHnrcsdabaOiZAcfMzczSYGZpMLM0mNm0Rr+OUXl5OVxdXbF161ajqbDp06fj1KlT2L9/f419WrRogZdeesloJOs///kPli1bhgsXLph1XmsXRkDDXe2zLo6YGXDM3MwsDWaWBjNLg5lrsuldaaakpqbi7NmzEAQB0dHR6NSp090eyiyFhYXQarUICAgwag8ICEBubq7JfXJzcy3qDwBlZWUoK7tdwarV6ntIbZpMJtzzbYhSc8TMgGPmZmZpMLM0mFkazGw9FhdG+fn5eOKJJ7Bv3z54eXlBFEUUFxejV69e+OKLL+Dn52eLnAZ3LgYoimKdCwRa2n/p0qVG6zYRERFR02Hxxdf//Oc/oVarkZaWhitXruDq1as4c+YM1Go1pk2bZouMAABfX1/I5fIaoz35+fk1RoWqBAYGWtQfAGbPno3i4mLDg2szERERNR0WF0Y7d+7EypUrERUVZWiLjo7GRx99ZHSRs7U5OzsjLi4OycnJRu3Jycno0aOHyX26d+9eo/+uXbtq7Q8ASqUSHh4eRg8iIiJqGiyeStPpdHBycqrR7uTkBJ1OZ5VQtUlMTMT48eMRHx+P7t27Y/Xq1cjKysJzzz0HAJgwYQJCQkIMd6hNnz4df/vb3/DWW29h2LBh2LZtG3bv3o1Dhw7ZNCcRERE5JosLo969e2P69OnYtGkTgoODAQCXLl3CSy+9hD59+lg9YHWjR49GUVERFi1ahJycHMTExOD7779HeHg4ACArKwsy2e1BsB49euCLL77Aa6+9hrlz5yIyMhKbN29Gt27dbJqTiIiIHJPFt+tfvHgRw4YNw5kzZxAWFgZBEJCVlYXY2Fhs27YNoaGhtspqF7a4XZ+IiIhsS7Lb9cPCwnDixAkkJyfj3LlzEEUR0dHR6Nu3r6WHIiIiImpQHGaBR3vhiBEREZHjkXSBxz179mDPnj3Iz8+vccH1unXr7uaQRERERHZncWG0cOFCLFq0CPHx8QgKCqpzsUQiIiIiR2JxYfTxxx9j/fr1GD9+vC3yEBEREdmNxQs8lpeX17lAIhEREZGjsrgwmjx5MpKSkmyRhYiIiMiuLJ5KKy0txerVq7F79260b9++xirY77//vtXCEREREUnJ4sLol19+QceOHQEAZ86cMdrGC7GJiIjIkVlcGO3du9cWOYiIiIjszuJrjIiIiIgaKxZGRERERHosjIiIiIj0WBgRERER6bEwIiIiItJjYURERESkx8KIiIiISI+FEREREZEeCyMiIiIiPRZGRERERHoWfyQI3TudTotLZ9Nw49pVuHl5IySqHWQyub1jERERNXksjCSWkXIYP65fjRtXCg1tbj6+6D0pAa279bBjMiIiIuJUmoQyUg5j+/tLjIoiALhxpRDb31+CjJTDdkpGREREAAsjyeh0Wvy4fnWdffZuWA2dTitRIiIiIroTCyOJXDqbVmOk6E7XiwqRnZ4mUSIiIiK6E68xksiNa1fN6vfNO68jsGUrNA8Lh6/+0TysBVTN3GyckIiIiFgYScTNy9usfhWlt3Ax/VdcTP/VeP/mvoZCqerhExIKJ6XKFnGJiIiaJBZGEgmJagc3H986p9PcfJpj6L9exZVLF1F48QKKLl5A4cUsXC8qwI2iQtwoKsRfp1Jv7yAI8AoIrDayVPnVOygEcgX/0xIREVlKEEVRtHeIhkytVsPT0xPFxcXw8PC4p2NV3ZVWm6GJc0zesl9WchOFF7P0hZL+kb+heDIAACAASURBVPUXbl1XmzyOTK6AT3CI0XScb1g4PP0DIMju7rIyrr1ERESO5G7fv1kY1cOahRFgeh0j9+a+6DXR8nWMSoqv3S6U9I+iixdQfuuWyf4KpRLNQ1pUFkotbhdMzbx9IAiCRZkdZe0lRyzomFkazCwNZpYGM9fEwshGrF0YAbb9ZRBFEdeLCvSjSren44ouZUFbUWFyH1UztxqjS83DWsDF3eOuR7kaAkcs6JhZGswsDWaWBjObxsLIRmxRGNmDTqvFtbzc29NxWX+h8OIFXM29DFGnM7mPq5c3ym7eqLWgAipHuyZ/+EmD+8vEEQs6ZpYGM0uDmaXBzLW72/dvXqHbRMjkcvgEh8AnOMToF05TXo4rl7ONr1+6mAV1QR5KzFhi4HpRIT586gk4q1SQyRWQKxSQKfRf9c9NtVU9r/q+el+5wgkyuVy/zUm/n/z2NoUccnm1bQo55IbvFRAEGfas+7jO3D+uX43wjp1NFnR1zCrWwvwdapuyrFwAdFWd+/64YTUi4uIbTBHKzNJgZmkwszTMybx3w2pEdulmt8wcMapHYxkxslT5rRKk/t82HN76ub2jEBFRE/P4vCUIa9f+no7BESOyKmcXV4RGtTOr74CpL8H/vgjotFpoNRroNBWVX7VaaKu+12ig1eq/6h9V3+u0xs8Nx9Bq9W3Vj1fL8attqygvh6jlR6sQETkqcxdFtgUWRlQrc9Zecm/ui+i/PdJghmkB4GLaL9iyaE69/Yb/ex5C2xoXfxYPoFrQXayj86Vz6dj2zuv1HmPYy68hpG20+Se1oUvn0rHt3Tfq7cfM94aZpcHM0jA3s7mLItsCCyOqlUwmR+9JCXVeJNdrYkKDKooA8wu6iI5xDSZ7y87xZmVuGdel4WSO68LMEmBmaTCzNMzNHGLmjIUt8ENkqU6tu/XA0MQ5cPPxNWp3b+7bIO92AG4XdHVpaAUdM0uDmaXBzNJgZtvgxdf1aKoXX9/JERcPs+ZimlJhZmkwszSYWRrMbBrXMbIRFkaOzRELOmaWBjNLg5mlwcw1sTCyERZGREREjudu3795jRERERGRHgsjIiIiIj0WRkRERER6LIyIiIiI9FgYEREREemxMCIiIiLSY2FEREREpMfCiIiIiEiPhRERERGRHgsjIiIiIj0WRkRERER6LIyIiIiI9FgYEREREemxMCIiIiLSY2FEREREpMfCiIiIiEiPhRERERGRnsLeAZoirU6LE/knUFBSAD9XP3T27wy5TG7vWERERE0eCyOJ7b6wG28efRN5JXmGtgDXALzS9RX0De9rx2RERETEqTQJ7b6wG4n7Eo2KIgDIL8lH4r5E7L6w207JiIiICGBhJBmtTos3j74JEWKNbVVtbx19C1qdVupoREREpMfCSCIn8k/UGCmqToSI3JJcnMg/IWEqIiIiqo6FkUQKSgrM6pdWlGbjJERERFQbFkYS8XP1M6vfe8ffw+jvRmND2gbk3ax9hImIiIisz2EKo6tXr2L8+PHw/P/t3Xlc1HXix/HXgMohMJ6AFiqWqXgj4X39RPFIbbNNLckeWuZvNc/toWW7am2ibeu2K2Xpbrm2HW6ahkoUZaD+yHNDWSBtFY9U1BIBLxL4/v4ARpFThe/A+H72mAfOZ77znffMI5m3n+9ltWK1WgkLC+PChQulLn/+/Hmee+45Wrdujbu7O82aNWP69OlkZGSYmPq6QO9AfNx9sGApdRkXZxeccCL552Re3/s6g9YNYtIXk1h/aD0Z2fbJLSIicjepMcXo8ccfJyEhgejoaKKjo0lISCAsLKzU5U+dOsWpU6d4/fXXSUxMZPXq1URHRzNp0iQTU1/n7OTMvOB5AMXKkaXgvyV9lvDNmG94qdtLBHoHYmCwO203C79dSP9/9Wf61ulEH43mSs4Ve7wFERERh2cxDKP4YVLVTEpKCgEBAezcuZNu3boBsHPnTnr06MH3339P69atK7SeTz75hPHjx3Pp0iVq1arYKZwyMzOxWq1kZGTg5eV12++hUEnnMfJ192Vu8Nxi5zE6dfEUn6d+TlRqFIfSD9nG3Wu5M7DZQIa1HEb3Jt2p5aTTUYmIiNzodr+/a8Q36rfffovVarWVIoDu3btjtVqJj4+vcDEq/HDKKkXZ2dlkZ2fb7mdmZt5+8BKENA9hgN+ACp35uqlHUyZ1mMSkDpP4If0HolKjiDoSxalLp9h0ZBObjmyigWsDQluEMsx/GJ0ad8JiKX1TnYiIiJStRhSjtLQ0vL29i417e3uTlpZWoXX8/PPPvPLKKzz77LNlLhceHs6iRYtuK2dFOTs586Dvg7f0nFb1WzGj/gymd5nO/nP72XJkC18c/YLzV8/z0fcf8dH3H3GPxz0M8x/GMP9h3F///ipKLyIi4rjsuo/RwoULsVgsZd727t0LUOJMiGEYFZohyczMZPjw4QQEBLBgwYIyl33hhRfIyMiw3U6cOHF7b66KWCwWOnt3Zn73+Xz92NesCFnBQy0fwq2WGycvnmRV4ip+FfkrRkeO5u+Jf+fUxVP2jiwiIlJj2HXGaNq0aYwdO7bMZVq0aMGBAwc4c6b4oevnzp3Dx8enzOdnZWUxZMgQPDw82LBhA7Vr1y5zeRcXF1xcXMoPXw3UdqpN73t60/ue3lzJuULciTi2pG5hx8kdHEo/xKH0Q7zx7zcI9A5keMvhDGo+iPqu9e0dW0REpNqqUTtf79q1i+DgYAB27dpF9+7dy9z5OjMzk9DQUFxcXIiKisLd3f2WX7uyd742Q0Z2BjHHYohKjWJv2l7bJUdqWWrR856eDPMfxgC/AbjXvvXPQ0REpCa43e/vGlGMAIYOHcqpU6d45513AJg8eTLNmzdn06ZNAJw8eZKBAweyZs0agoODycrKYtCgQVy+fJkNGzZQt25d27oaN26Ms3PxnZ1LUhOL0Y3SLqXxxdEv2HJkCynnU2zjbrXc6O/Xn+H+w+nZtCe1ncueSRMREalJHL4YnT9/nunTpxMZGQnAyJEjiYiIoF69egAcPXoUf39/vvnmG/r3709sbCwDBgwocV2pqam0aNGiQq9b04vRjY5cOJJ/ZFtqFCeyru87ZXWxMrj5YIa3HE4X7y44WYrvepabl1uhI+lERESqA4cvRvbiSMWokGEY/Oen/xCVGsXnqZ/z89WfbY/51vVlqP9QhvsP54H6D2CxWEo895KPuw/zgucVO/eSiIhIdaBiVEUcsRjdKCcvh91pu4k6EsVXx7/i0rVLtsfus97HAw0e4PPUz4s9r/Ds3cv6L6vW5agmznQpszmU2RzKbA5lLk7FqIo4ejG60dWcq2w/uZ2oI1HE/RjHtbxrZS5vwYKPuw/Ro6Or5V/AmjjTpczmUGZzKLM5lLlkKkZV5G4qRjfK/CWTvx34G+8lvVfusk3rNqWRWyPcarldv9V2K3r/hpt7LfcSH3ev5Y5rLdcS93G6VV8d+4rZsbNtR+QVqs4zXcpsDmU2hzKbQ5lLp2JURe7WYgQQdSSKudvnmv66rs6uxQtVGUWrSLmq7Y6Lswvzd8zn/NXzpb5GY7fGfDT8ozJnum6+2K9tvIyTipb6nFLGC9eXm5fLo5se5dyVc6Uu5+3uzScPfVJtZueU2RzKbA5lNkd5mStzS4SKURW5m4vRnrQ9TPxiYrnLzek6h2ZezbiSc6X027Wi9y/nXC62jIiICMC7oe/e8qWzbubQF5EV+wj0DsTH3Yezl88Wm/KE680+LCDsjpu9YRhczb1arEiVVKCu5Fzh8rWSx6/kXOHM5TOkXarYNfRunskp6X2KiIi5zl0ufRasqqkYSamcnZyZFzyP2bGzsWApUhoKC8Xc4LmVMkVrsVhsm8PuVEVnuirjXyQlTbiWVq7KWnZv2l6eiXmm3NdbOWglQb5Bt5iyauxN28vkmMnlLqfMd0aZzaHM5qho5sbujU1IUzIVIylTSPMQlvVfVuLRA3OD51a7nfqg4jNdgd6Bd/xaJe1vVOr+RGVc7/hB3wcrlDnYN7ja7CsQ7BuszCZQZnMoszkqmrkyfj/frjs//EccXkjzEL4Y/QXvhr7L0j5LeTf0XaJHR1fLUgTXZ7qgeEmp7JmuyqLM5lBmcyizOZS5amjn63LczTtf13QlnSfD19232s50gTKbRZnNoczmUOaS6ai0KqJiVLPpbLDmUGZzKLM5lNkcOvN1DaViJCIiUvPc7ve39jESERERKaBiJCIiIlJAxUhERESkgIqRiIiISAEVIxEREZECKkYiIiIiBVSMRERERAqoGImIiIgU0EVk7SEvF47Fw8Uz4OEDzXtCNT9DqYiIyN1AxchsyZEQPRcyT10f82oKQ5ZCwEj75RIRERFtSjNVciT868mipQgg83T+eHKkfXKJiIgIoGJknrzc/JkiSro0XcFY9Lz85URERMQuVIzMciy++ExREQZknsxfTkREROxCxcgsF89U7nIiIiJS6VSMzOLhU7HlftwDOb9UbRYREREpkYqRWZr3zD/6DEvZy+16G958EA58Anl5pkQTERGRfCpGZnFyzj8kHyhejiz5t8AJUNcb0o/Cp0/DO33hhxgwStphW0RERCqbipGZAkbCY2vAq0nRca+m+eMj/wrTv4P/eQlcvOBMInzwKKweDid22yeziIjIXcRiGJqOKEtmZiZWq5WMjAy8vLwqZ6UVOfP15fOwYxnsWgm52fljrYfDwN+Bd9vKySEiIuKgbvf7W8WoHFVSjG5Fxo8QuwQSPgAjD7BAp3Ew4AWo18z8PCIiIjXA7X5/a1NadWe9F0ZFwG92QduRgAH7P4TlXeHzeXDpJ3snFBERcRgqRjVF4wdgzPvw9Fbw7wu5v8CuFfCXTvkzStlZ9k4oIiJS46kY1TT3doUnIyFsAzTpDL9chNjw/IK0cwXkZNs7oYiISI2lYlQTWSxw3//AM9/Ar1dDg/vg8s/511pbHgQJH+qaayIiIrdBxagmc3KCdr+CqbtgxF/AswlkHIeN/wsresH3UToHkoiIyC1QMXIEzrWh61Pw3L8hZBG4WuFcCnw8Dv4+GI7+n70TioiI1AgqRo6kjjv0ngkz9kPv2VDLDX7cDauHwT8fhbREeycUERGp1lSMHJFbfQhZADMSIGgSONWC/8bA271h/dNw/oi9E4qIiFRLKkaOzNMXHloGU3dD+9H5Y4mfQMSDsGUOZJ2xbz4REZFqRsXobtDwPnj0XXh2G9wfAnk5sOdv8NfO8PUrcDXD3glFRESqBRWju0mTTjB+PUzYDPcEwbXLsP31/HMg/d9f4doVeycUERGxKxWju5F/H3j6KxjzATRqDVfSIeZ38NdA2PcPyM2xd0IRERG7UDG6W1ks0PYh+M23MOot8LoXsk7BpunwVndI/qzoOZDyciF1OySuy/+pE0iKiIgDshiGzgBYltu9Om+Nc+0q7H0Xtv0RrpzPH2samH9029VMiJ4LmaeuL+/VFIYshYCR9skrIiJShtv9/lYxKsddU4wKXc2EbyMgPgKuXSpjQUv+j8fWqByJiEi1o2JURe66YlTo4jnY9hrsXlnGQpb8maOZieDkbFq0W5KXC8fi4eIZ8PCB5j2rb9ZCymwOZTaHMptDmYu53e/vWpWWQByLR2NoO7KcYmRA5kn4WwjUb5F/KRK3evk/XQt/Fo7dcN+5tjnvITmy5m0CVGZzKLM5lNkcylypNGNUjrt2xgjyd7ReP6ny11u77k0lqqQiVcp4Hc/8i+eWJzkS/vUkcPP/3tV4E6Aym0OZzaHM5lDmUmnGSCqfh0/Flus1Czx98k8UeeVC/s+rGXD1hj9fuQC/ZOUvf+1S/i3rVNnrLYnFCVy8yihR9cDFE+KWUPwvHdfHon4LDVsVnba1WEp6wZvulrTMzU+5jfXk5eZnKjWzBaKeB98O1Wd6XJnNoczmUGZzVCRz9DxoM9xumTVjVI67esYoLxfeaA+Zpyn5f+Jb3McoNweyM4sXppJKVEnlKudqZb9DERGpjiZszj/n3h3QjJFUPifn/O29/3qS/BmPG8tRwYzHkCUVb/XOtcC9Qf7tdly7ekNhurE0XShaps78B07uK399tetCrTpFz9cEFCuBxTphCSWx3HWU83juNci7VmpUG6fa1etffspc9ZTZHMpsjopmvmi/a3mqGEnZAkbmb+8tcSe5JeZuu67tmn/zLGcTX+p2+MdD5a/v8bV3/C+SSlPRzGEblPlOKLM5lNkcjpy5ortyVAEVIylfwMj87b015VDQ5j3zi1t5mwCb9zQ7WemU2RzKbA5lNocyVwldEkQqxsk5/18cHR7N/1ldSxFc3wQIFNvp+XY2AZpBmc2hzOZQZnMoc5VQMRLHVLgJ0KtJ0XGvptXz8FVQZrMoszmU2RzKXOl0VFo57uqj0hyBzgZrDmU2hzKbQ5nNUU3PfK1iVA4VIxERkZrndr+/tSlNREREpICKkYiIiEgBFSMRERGRAipGIiIiIgVUjEREREQKqBiJiIiIFKgxxSg9PZ2wsDCsVitWq5WwsDAuXLhQoecahsHQoUOxWCxs3LixipOKiIhITVVjitHjjz9OQkIC0dHRREdHk5CQQFhYWIWe+8Ybb2Cx3HzqcREREZGiasRFZFNSUoiOjmbnzp1069YNgFWrVtGjRw8OHjxI69atS33u/v37WbZsGXv27KFJkyalLiciIiJSI4rRt99+i9VqtZUigO7du2O1WomPjy+1GF2+fJlx48YRERGBr69vhV4rOzub7Oxs2/2MjAwg/wyaIiIiUjMUfm/f6gU+akQxSktLw9vbu9i4t7c3aWlppT5v1qxZ9OzZk1GjRlX4tcLDw1m0aFGxcT8/vwqvQ0RERKqHrKwsrFZrhZe3azFauHBhiSXkRnv27AEocR8hwzBK3XcoMjKSrVu38t13391SphdeeIHZs2fb7ufl5XH+/HkaNmxYqfspZWZm4ufnx4kTJ3QNtiqmz9oc+pzNoc/ZHPqczVGVn7NhGGRlZdG0adNbep5di9G0adMYO3Zsmcu0aNGCAwcOcObMmWKPnTt3Dh8fnxKft3XrVg4fPky9evWKjI8ePZo+ffoQGxtb4vNcXFxwcXEpMnbzOiqTl5eX/tKZRJ+1OfQ5m0Ofszn0OZujqj7nW5kpKmTXYtSoUSMaNWpU7nI9evQgIyOD3bt3ExwcDMCuXbvIyMigZ8+eJT5n3rx5PP3000XGOnTowJ///GdGjBhx5+FFRETE4dSIfYzatm3LkCFDeOaZZ3jnnXcAmDx5Mg899JBtx+uTJ08ycOBA1qxZQ3BwML6+viXucN2sWTP8/f1NzS8iIiI1Q405j9EHH3xAhw4dGDx4MIMHD6Zjx468//77tsevXbvGwYMHuXz5sh1TVpyLiwsLFiwottlOKp8+a3PoczaHPmdz6HM2R3X8nC3GrR7HJiIiIuKgasyMkYiIiEhVUzESERERKaBiJCIiIlJAxUhERESkgIqRnbz11lv4+/vj6upK165d2b59u70jOZTw8HAefPBBPD098fb25uGHH+bgwYP2juXwwsPDsVgszJw5095RHM7JkycZP348DRs2xN3dnc6dO7Nv3z57x3I4OTk5vPTSS/j7++Pm5kbLli15+eWXycvLs3e0Gm3btm2MGDGCpk2bYrFY2LhxY5HHDcNg4cKFNG3aFDc3N/r3709SUpJdsqoY2cHatWuZOXMm8+fP57vvvqNPnz4MHTqU48eP2zuaw4iLi2Pq1Kns3LmTmJgYcnJyGDx4MJcuXbJ3NIe1Z88eVq5cSceOHe0dxeGkp6fTq1cvateuzeeff05ycjJ/+tOfqvSs/HerpUuX8vbbbxMREUFKSgqvvfYaf/zjH1m+fLm9o9Voly5dolOnTkRERJT4+GuvvcayZcuIiIhgz549+Pr6MmjQILKyskxOChhiuuDgYGPKlClFxtq0aWPMmzfPTokc39mzZw3AiIuLs3cUh5SVlWW0atXKiImJMfr162fMmDHD3pEcyty5c43evXvbO8ZdYfjw4cbEiROLjD3yyCPG+PHj7ZTI8QDGhg0bbPfz8vIMX19fY8mSJbaxq1evGlar1Xj77bdNz6cZI5P98ssv7Nu3j8GDBxcZHzx4MPHx8XZK5fgyMjIAaNCggZ2TOKapU6cyfPhwQkJC7B3FIUVGRhIUFMSvf/1rvL296dKlC6tWrbJ3LIfUu3dvvv76aw4dOgTA/v372bFjB8OGDbNzMseVmppKWlpake9FFxcX+vXrZ5fvxRpxSRBH8tNPP5Gbm1vs4rc+Pj6kpaXZKZVjMwyD2bNn07t3b9q3b2/vOA7n448/5t///jd79uyxdxSHdeTIEVasWMHs2bN58cUX2b17N9OnT8fFxYUnn3zS3vEcyty5c8nIyKBNmzY4OzuTm5vLq6++yrhx4+wdzWEVfveV9L147Ngx0/OoGNmJxWIpct8wjGJjUjmmTZvGgQMH2LFjh72jOJwTJ04wY8YMvvzyS1xdXe0dx2Hl5eURFBTE4sWLAejSpQtJSUmsWLFCxaiSrV27ln/+8598+OGHtGvXjoSEBGbOnEnTpk2ZMGGCveM5tOryvahiZLJGjRrh7OxcbHbo7Nmzxdqy3LnnnnuOyMhItm3bxr333mvvOA5n3759nD17lq5du9rGcnNz2bZtGxEREWRnZ+Ps7GzHhI6hSZMmBAQEFBlr27Yt69evt1Mix/X8888zb948xo4dC0CHDh04duwY4eHhKkZVpPCC72lpaTRp0sQ2bq/vRe1jZLI6derQtWtXYmJiiozHxMTQs2dPO6VyPIZhMG3aND799FO2bt2Kv7+/vSM5pIEDB5KYmEhCQoLtFhQUxBNPPEFCQoJKUSXp1atXsdNNHDp0iObNm9spkeO6fPkyTk5FvxqdnZ11uH4V8vf3x9fXt8j34i+//EJcXJxdvhc1Y2QHs2fPJiwsjKCgIHr06MHKlSs5fvw4U6ZMsXc0hzF16lQ+/PBDPvvsMzw9PW0zdFarFTc3Nzuncxyenp7F9tuqW7cuDRs21P5clWjWrFn07NmTxYsX89hjj7F7925WrlzJypUr7R3N4YwYMYJXX32VZs2a0a5dO7777juWLVvGxIkT7R2tRrt48SL//e9/bfdTU1NJSEigQYMGNGvWjJkzZ7J48WJatWpFq1atWLx4Me7u7jz++OPmhzX9ODgxDMMw3nzzTaN58+ZGnTp1jMDAQB1GXsmAEm/vvfeevaM5PB2uXzU2bdpktG/f3nBxcTHatGljrFy50t6RHFJmZqYxY8YMo1mzZoarq6vRsmVLY/78+UZ2dra9o9Vo33zzTYm/kydMmGAYRv4h+wsWLDB8fX0NFxcXo2/fvkZiYqJdsloMwzDMr2MiIiIi1Y/2MRIREREpoGIkIiIiUkDFSERERKSAipGIiIhIARUjERERkQIqRiIiIiIFVIxERERECqgYiYiIiBRQMRKRSvHUU09hsVhYsmRJkfGNGzdW6RWyFy5cSOfOnats/RUVGxuLxWLhwoUL9o4iIndAxUhEKo2rqytLly4lPT3d3lFERG6LipGIVJqQkBB8fX0JDw8vc7n4+Hj69u2Lm5sbfn5+TJ8+nUuXLgGwfPlyOnToYFu2cMbpzTfftI2FhobywgsvsHr1ahYtWsT+/fuxWCxYLBZWr14NwPHjxxk1ahQeHh54eXnx2GOPcebMGds6Cmea3n//fVq0aIHVamXs2LFkZWWVmvvYsWOMGDGC+vXrU7duXdq1a0dUVBRHjx5lwIABANSvXx+LxcJTTz0FgGEYvPbaa7Rs2RI3Nzc6derEunXrbOssnGnasmULnTp1wtXVlW7dupGYmFju64pI5VMxEpFK4+zszOLFi1m+fDk//vhjicskJiYSGhrKI488woEDB1i7di07duxg2rRpAPTv35+kpCR++uknAOLi4mjUqBFxcXEA5OTkEB8fT79+/RgzZgxz5syhXbt2nD59mtOnTzNmzBgMw+Dhhx/m/PnzxMXFERMTw+HDhxkzZkyRLIcPH2bjxo1s3ryZzZs3ExcXV2xT4I2mTp1KdnY227ZtIzExkaVLl+Lh4YGfnx/r168H4ODBg5w+fZq//OUvALz00ku89957rFixgqSkJGbNmsX48eNt76fQ888/z+uvv86ePXvw9vZm5MiRXLt2rczXFZEqYJdL14qIw5kwYYIxatQowzAMo3v37sbEiRMNwzCMDRs2GDf+qgkLCzMmT55c5Lnbt283nJycjCtXrhh5eXlGo0aNjHXr1hmGYRidO3c2wsPDDW9vb8MwDCM+Pt6oVauWkZWVZRiGYSxYsMDo1KlTkfV9+eWXhrOzs3H8+HHbWFJSkgEYu3fvtj3P3d3dyMzMtC3z/PPPG926dSv1PXbo0MFYuHBhiY8VXj08PT3dNnbx4kXD1dXViI+PL7LspEmTjHHjxhV53scff2x7/Oeffzbc3NyMtWvXlvu6IlK5NGMkIpVu6dKl/OMf/yA5ObnYY/v27WP16tV4eHjYbqGhoeTl5ZGamorFYqFv377ExsZy4cIFkpKSmDJlCrm5uaSkpBAbG0tgYGCZMyYpKSn4+fnh5+dnGwsICKBevXqkpKTYxlq0aIGnp6ftfpMmTTh79myp650+fTp/+MMf6NWrFwsWLODAgQNlfg7JyclcvXqVQYMGFXm/a9as4fDhw0WW7dGjh+3PDRo0oHXr1rast/q6InL7VIxEpNL17duX0NBQXnzxxWKP5eXl8eyzz5KQkGC77d+/nx9++IH77rsPyN+cFhsby/bt2+nUqRP16tWjb9++xMXFERsbS//+/ct8fcMwSjwS7ubx2rVrF3ncYrGQl5dX6nqffvppjhw5QlhYGImJiQQFBbF8+fJSly9c15YtW4q83+Tk5CL7GZWmMOutvq6I3D4VIxGpEkuWLGHTpk3Ex8cXGQ8MDCQpKYn777+/2K1OnTrA9f2M9QGSYQAAApNJREFU1q1bZytB/fr146uvvrLtX1SoTp065ObmFnmNgIAAjh8/zokTJ2xjycnJZGRk0LZt2zt6X35+fkyZMoVPP/2UOXPmsGrVKlsOoEiWgIAAXFxcOH78eLH3euNsFsDOnTttf05PT+fQoUO0adOm3NcVkcpVy94BRMQxdejQgSeeeKLYzMbcuXPp3r07U6dO5ZlnnqFu3bqkpKQQExNjW7Z9+/Y0bNiQDz74gM8++wzIL0tz5swBoHfv3rb1tWjRgtTUVBISErj33nvx9PQkJCSEjh078sQTT/DGG2+Qk5PDb37zG/r160dQUNBtv6eZM2cydOhQHnjgAdLT09m6dautaDVv3hyLxcLmzZsZNmwYbm5ueHp68tvf/pZZs2aRl5dH7969yczMJD4+Hg8PDyZMmGBb98svv0zDhg3x8fFh/vz5NGrUiIcffrjc1xWRyqUZIxGpMq+88gqGYRQZ69ixI3Fxcfzwww/06dOHLl268Lvf/Y4mTZrYlrFYLLZZoT59+tieZ7Va6dKlC15eXrZlR48ezZAhQxgwYACNGzfmo48+wmKxsHHjRurXr0/fvn0JCQmhZcuWrF279o7eT25uLlOnTqVt27YMGTKE1q1b89ZbbwFwzz33sGjRIubNm4ePj4/tKLtXXnmF3//+94SHh9O2bVtCQ0PZtGkT/v7+Rda9ZMkSZsyYQdeuXTl9+jSRkZFFZqFKe10RqVwW4+bfWiIiYprY2FgGDBhAeno69erVs3cckbueZoxERERECqgYiYiIiBTQpjQRERGRApoxEhERESmgYiQiIiJSQMVIREREpICKkYiIiEgBFSMRERGRAipGIiIiIgVUjEREREQKqBiJiIiIFFAxEhERESnw/8euZ72GlBRhAAAAAElFTkSuQmCC",
      "text/plain": [
       "PyPlot.Figure(PyObject <Figure size 640x480 with 1 Axes>)"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "PyObject Text(0.5,1,'Newton steps for $\\\\alpha = 0.5$')"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "M₀ = A' * diagm(Ỹₖ.(zeros(8))) * A # matrix AᵀYA for zero voltage drops (i.e. linear problem)\n",
    "v₀ = pinv(M₀) * [1,-1,0,0,0,0]  # initial guess = solution to linear problem\n",
    "vsteps = newton(v₀, 0:10)\n",
    "plot([vsteps[i][j] for i=1:length(vsteps), j=1:6], \"o-\")\n",
    "xlabel(\"Newton steps\")\n",
    "ylabel(\"node voltages\")\n",
    "legend([L\"v_1\", L\"v_2\", L\"v_3\", L\"v_4\", L\"v_5\", L\"v_6\"], loc=\"upper right\")\n",
    "title(L\"Newton steps for $\\alpha = 0.5$\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Clearly, it is converging pretty rapidly.  Another way to see this is to plot the convergence of the length (norm) of the $f(v)$ vector, $\\Vert f(v) \\Vert = \\sqrt{f(v)^T f(v)}$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlAAAAHHCAYAAABwaWYjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3X1cVGX+//HXiALegXjHCqLQja6Kt2iaRokmhqarprm1W2pZP2t3DUkr110rW6Oy1DbDNDPr253Zqm2FKZUKieZN0pZaq480UFHzJhBMRDi/P84yioAOMHDm5v18PObBzHWuOeczs7a8Oec612UzDMNARERERBxWx+oCRERERNyNApSIiIhIJSlAiYiIiFSSApSIiIhIJSlAiYiIiFSSApSIiIhIJSlAiYiIiFSSApSIiIhIJSlAiYiIiFSSApSIiIhIJSlAiYiIiFSSApRIBZYtW4bNZsPf35+ffvqpzPb+/fsTGRlZa/Wkp6fzxBNP8Msvv9TaMcXzLF++nE6dOlG/fn1sNhsZGRlWl1Sj8vLyiI+PJyQkBH9/f7p168Z7773n0Hs3bNiAzWYr97Fly5YarlxcnQKUyBUUFBTwt7/9zeoySE9P58knn1SAkir7+eefueuuu7j66qv59NNP2bx5M+3atbO6rBo1atQo3njjDR5//HHWrFlDr169uOOOO3jnnXcc3sfTTz/N5s2bSz1q848ncU11rS5AxNXdcsstvPPOO0ydOpWuXbtaXY7UgDNnztCgQQOry6hx//3vfyksLOSPf/wjN910k9P266rfX3JyMikpKbzzzjvccccdAMTExPDTTz8xbdo0xo4di4+PzxX3c+2119KnT5+aLlfcjM5AiVzBI488QrNmzXj00Uev2Hfv3r3ceeedtGzZEj8/Pzp06MDLL79s375r1y5sNhsrVqywt+3YsQObzUanTp1K7Wv48OFERUUB8MQTTzBt2jQAIiIi7JcRNmzYAMCXX37JwIEDady4MQ0aNKBv37588sknZep74oknsNls7Nq1izvuuIPAwECCg4O55557yMnJueLn+/7777njjjsIDg7Gz8+PNm3acPfdd1NQUFCqnyP1OFLL6tWrsdlsfP7552VqWbhwITabjf/85z8Of/8XH/frr79m9OjRBAUFcfXVV9u3f/jhh3Tp0gU/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",
      "text/plain": [
       "PyPlot.Figure(PyObject <Figure size 640x480 with 1 Axes>)"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "PyObject Text(0.5,1,'Newton convergence for $\\\\alpha = 0.5$')"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xlabel(\"Newton steps\")\n",
    "ylabel(L\"\\Vert f(v) \\Vert\")\n",
    "semilogy(norm.(f.(vsteps)), \"bo-\")\n",
    "title(L\"Newton convergence for $\\alpha = 0.5$\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It converges **faster than exponentially** with the step.  Once it is close to the solution, Newton roughly **doubles the number of digits in each step**.\n",
    "\n",
    "Eventually, it stops getting better: the accuracy is **limited by roundoff errors** once the error reaches $\\approx 10^{-16}$, related to the fact that the computer is only doing arithmetic to about 16 digits of accuracy."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Computing the Jacobian manually\n",
    "\n",
    "It might be nice to look more explicitly at the Jacobian matrix to understand why it is singular in this problem, and why that is okay here (i.e. why a solution exists).  In really large computational problems, people often compute Jacobians more explicitly in order to extract computational savings (by exploiting any special forms of the matrices in the analytical result).\n",
    "\n",
    "It is also, unfortunatey, a lot messier and more error prone to compute the Jacobian manually.  I often like to think of the Jacobian in terms of Taylor expanding: if you **Taylor expand everything to first order**, throwing away higher-order terms, then the **Jacobian matrix is the coefficient of the 1st-order term** in the final result.\n",
    "\n",
    "The admittance is written in terms of the voltage rise $d = Av$.  If we change $v$ to $v+\\delta$, then we get $d + A\\delta$.  Let's denote $\\hat{\\delta} = A\\delta$.  Then the formula for each component of our current $i$ becomes:\n",
    "\n",
    "$$\n",
    "i_j = -\\tilde{Y}_j(d_j +\\hat{\\delta}_j) \\, (d_j +\\hat{\\delta}_j) \\approx -\\tilde{Y}_j(d_j) d_j - (\\tilde{Y}_j(d_j) + \\tilde{Y}_j'(d_j) d_j) \\hat{\\delta}_j\n",
    "$$\n",
    "\n",
    "where we have just Taylor-expanded around $\\hat{\\delta}_j = 0$, and $\\tilde{Y}_j'(d_j) = -2 \\alpha_j d_j Y_j / (1 + \\alpha_j d_j^2)^2$.  Let $K_j(d_j) = \\tilde{Y}_j(d_j) + \\tilde{Y}_j'(d_j) d_j$, and then we have:\n",
    "\n",
    "$$\n",
    "i_j \\approx - \\left[ \\tilde{Y}_j(d_j) d_j + K_j(d_j) \\hat{\\delta}_j \\right]\n",
    "$$\n",
    "\n",
    "Plugging this into $f(v+\\delta)$, we get\n",
    "\n",
    "$$\n",
    "f(v+\\delta) \\approx \\underbrace{A^T Y(Av) Av - s}_{f(v)} + \\underbrace{A^T K(Av) A}_{J(v)} \\delta\n",
    "$$\n",
    "\n",
    "and hence\n",
    "\n",
    "$$\n",
    "J(v) = A^T K(Av) A\n",
    "$$\n",
    "\n",
    "where\n",
    "\n",
    "$$\n",
    "K(d) = \\begin{pmatrix} K_1(d_1) &     &        &     \\\\\n",
    "                        & K_2(d_2) &        &     \\\\\n",
    "                        &     & \\ddots &     \\\\\n",
    "                        &     &        & K_8(d_8) \\\\\n",
    "    \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "There is one slight problem here: $J$ is a singular matrix even if all $K_j \\neq 0$, because of $N(A) \\ne \\{0\\}$.   Just as with $s$, $J(v) y = f(v)$ only has a solution if $f(v) \\in C(J) \\subseteq C(A^T)$.  Fortunately, $f(v) = A^T Y A - s$ is *always* in $C(A^T)$ as long as $s \\in C(A^T) = N(A)^\\perp$, which was required *anyway* (from above) if we are to have a solution in the *linear* case.\n",
    "\n",
    "(We can still run into a singular $J$ for \"unlucky\" $K_j$, but that is a typical hazard of Newton's method, just like we can run into $f'(x)=0$ for unlucky $x$ values.  The important thing is that it doesn't happen \"generically\", i.e. singularities only occur at isolated points.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "J_manual (generic function with 1 method)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Ỹₖ′(d) = -2αₖ*d*Yₖ / (1 + αₖ * d^2)^2\n",
    "Kₖ(d) = Ỹₖ(d) + Ỹₖ′(d)*d\n",
    "J_manual(v) = A' * diagm(Kₖ.(A*v)) * A"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's check this against our automatic Jacobian:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6×6 Array{Float64,2}:\n",
       "  0.0990134  -0.153337   0.0        0.0543237   0.0         0.0      \n",
       " -0.153337    0.72329    0.121405   0.0         0.0        -0.691358 \n",
       "  0.0         0.121405  -0.243995   0.0         0.0         0.12259  \n",
       "  0.0543237   0.0        0.0       -0.167821    0.0484289   0.0650683\n",
       "  0.0         0.0        0.0        0.0484289   0.173793   -0.222222 \n",
       "  0.0        -0.691358   0.12259    0.0650683  -0.222222    0.725922 "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v = [0.1,1.2,3.4,5.6,-0.3,0.7] # a \"random\" vector\n",
    "ForwardDiff.jacobian(f, v)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6×6 Array{Float64,2}:\n",
       "  0.0990134  -0.153337   0.0        0.0543237   0.0         0.0      \n",
       " -0.153337    0.72329    0.121405   0.0         0.0        -0.691358 \n",
       "  0.0         0.121405  -0.243995   0.0         0.0         0.12259  \n",
       "  0.0543237   0.0        0.0       -0.167821    0.0484289   0.0650683\n",
       "  0.0         0.0        0.0        0.0484289   0.173793   -0.222222 \n",
       "  0.0        -0.691358   0.12259    0.0650683  -0.222222    0.725922 "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "J_manual(v)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6×6 Array{Float64,2}:\n",
       "  5.55112e-17  -5.55112e-17   0.0          …   0.0           0.0        \n",
       " -5.55112e-17   0.0           0.0              0.0           0.0        \n",
       "  0.0           0.0          -5.55112e-17      0.0           5.55112e-17\n",
       "  0.0           0.0           0.0             -2.77556e-17   2.77556e-17\n",
       "  0.0           0.0           0.0              2.77556e-17   0.0        \n",
       "  0.0           0.0           5.55112e-17  …   0.0          -1.11022e-16"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ForwardDiff.jacobian(f, v) - J_manual(v)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Yup, it computed our Jacobian automatically and perfectly accurately (up to the machine-precision rounding errors).\n",
    "\n",
    "[How ForwardDiff works](https://arxiv.org/abs/1607.07892), based on [dual numbers](https://en.wikipedia.org/wiki/Dual_number), is outside the scope of 18.06, but there is a nice [tutorial notebook](http://nbviewer.jupyter.org/github/stevengj/18S096-iap17/blob/master/lecture8/Automatic%20differentiation%20and%20applications.ipynb) by [David Sanders](http://sistemas.fciencias.unam.mx/~dsanders/)."
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Julia 0.6.3",
   "language": "julia",
   "name": "julia-0.6"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "0.6.3"
  },
  "widgets": {
   "state": {
    "0256c79a-4ea4-4bc5-8716-6f0859951218": {
     "views": [
      {
       "cell_index": 4
      }
     ]
    },
    "51575b3a-dace-4a85-aece-92e117ab0b40": {
     "views": [
      {
       "cell_index": 4
      }
     ]
    },
    "a0358c2f-65a4-47b3-9058-fc314b5937ca": {
     "views": [
      {
       "cell_index": 4
      }
     ]
    },
    "ab41f0e8-652b-49ec-8056-5a0b11e728d8": {
     "views": [
      {
       "cell_index": 4
      }
     ]
    }
   },
   "version": "1.2.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
